七牛开发者中心:https://developer.qiniu.com/
项目源码:https://github.com/Tellsea/springboot-learn/tree/master/springboot-qiniu
<dependency>
<groupId>com.qiniugroupId>
<artifactId>qiniu-java-sdkartifactId>
<version>[7.2.0, 7.2.99]version>
dependency>
我还使用了fastjson,自己加一下
qiniu:
accessKey: 个人中心-->秘钥管理-->AccessKey
secretKey: 个人中心-->秘钥管理-->SecretKey
bucket: 存储空间名称
prefix: 访问域名
@Configuration
@EnableConfigurationProperties(QiniuProperties.class)
public class QiniuFileConfig {
@Autowired
private QiniuProperties qiniuProperties;
/**
* 华东机房,配置自己空间所在的区域
*/
@Bean
public com.qiniu.storage.Configuration qiniuConfig() {
return new com.qiniu.storage.Configuration(Zone.zone0());
}
/**
* 构建一个七牛上传工具实例
*/
@Bean
public UploadManager uploadManager() {
return new UploadManager(qiniuConfig());
}
/**
* 认证信息实例
* @return
*/
@Bean
public Auth auth() {
return Auth.create(qiniuProperties.getAccessKey(), qiniuProperties.getSecretKey());
}
/**
* 构建七牛空间管理实例
*/
@Bean
public BucketManager bucketManager() {
return new BucketManager(auth(), qiniuConfig());
}
@Bean
public Gson gson() {
return new Gson();
}
}
@Data
@ConfigurationProperties(prefix = "qiniu")
public class QiniuProperties {
private String accessKey;
private String secretKey;
private String bucket;
private String prefix;
}
public interface QiniuService {
String uploadFile(File file) throws QiniuException;
String uploadFile(InputStream inputStream) throws QiniuException;
Response delete(String key) throws QiniuException;
}
@Slf4j
@Service
@EnableConfigurationProperties(QiniuProperties.class)
public class QiniuServiceImpl implements QiniuService, InitializingBean {
@Autowired
private QiniuProperties qiniuProperties;
@Autowired
private UploadManager uploadManager;
@Autowired
private BucketManager bucketManager;
@Autowired
private Auth auth;
// 定义七牛云上传的相关策略
private StringMap putPolicy;
/**
* 以文件的形式上传
*
* @param file
* @return
* @throws QiniuException
*/
@Override
public String uploadFile(File file) throws QiniuException {
Response response = this.uploadManager.put(file, null, getUploadToken());
int retry = 0;
while (response.needRetry() && retry < 3) {
response = this.uploadManager.put(file, null, getUploadToken());
retry++;
}
//解析结果
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
String return_path = qiniuProperties.getPrefix() + "/" + putRet.key;
log.info("文件名称={}", return_path);
return return_path;
}
/**
* 以流的形式上传
*
* @param inputStream
* @return
* @throws QiniuException
*/
@Override
public String uploadFile(InputStream inputStream) throws QiniuException {
Response response = this.uploadManager.put(inputStream, null, getUploadToken(), null, null);
int retry = 0;
while (response.needRetry() && retry < 3) {
response = this.uploadManager.put(inputStream, null, getUploadToken(), null, null);
retry++;
}
//解析结果
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
String return_path = qiniuProperties.getPrefix() + "/" + putRet.key;
log.info("文件名称={}", return_path);
return return_path;
}
/**
* 删除七牛云上的相关文件
*
* @param key
* @return
* @throws QiniuException
*/
@Override
public Response delete(String key) throws QiniuException {
Response response = bucketManager.delete(qiniuProperties.getBucket(), key);
int retry = 0;
while (response.needRetry() && retry++ < 3) {
response = bucketManager.delete(qiniuProperties.getBucket(), key);
}
return response;
}
@Override
public void afterPropertiesSet() throws Exception {
this.putPolicy = new StringMap();
putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"width\":$(imageInfo.width), \"height\":${imageInfo.height}}");
// 自定义文件名字
// putPolicy.put("saveKey", UUID.randomUUID().timestamp());
}
/**
* 获取上传凭证
*
* @return
*/
private String getUploadToken() {
return this.auth.uploadToken(qiniuProperties.getBucket(), null, 3600, putPolicy);
}
}
@RestController
@RequestMapping("/qiniu")
public class QiniuController {
@Autowired
private QiniuService qiniuService;
/**
* 以流的形式上传图片
*
* @param file
* @return 返回访问路径
* @throws IOException
*/
@PostMapping("upload")
public String uploadFile(@RequestParam(value = "file") MultipartFile file) throws IOException {
return qiniuService.uploadFile(file.getInputStream());
}
/**
* 删除文件
*
* @param key
* @return
* @throws IOException
*/
@GetMapping("delete/{key}")
public Response deleteFile(@PathVariable String key) throws IOException {
return qiniuService.delete(key);
}
}