一次项目中要求将图片上传到七牛云,所以记录了下来,有相关需求的朋友可以参考一下,
- 首先导入七牛云的相关依赖,
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.2.99]</version>
</dependency>
2.配置文件中配置自己申请的七牛相关的配置
# 七牛密钥,配上自己申请的七牛账号对应的密钥
qiniu.AccessKey=you qiniu accessKey
qiniu.SecretKey=you qiniu secretKey
# 七牛空间名
qiniu.Bucket=you qiniu bucket
# 外链访问路径
qiniu.cdn.prefix=you qiniu cdn.prefix
3.创建七牛上传的一个配置类
package com.example.qiniuyun.config;
import com.google.gson.Gson;
import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 七牛配置类
*/
@Configuration
public class QiniuUploadFileConfig {
/**
* 华东机房,配置自己空间所在的区域
*/
@Bean
public com.qiniu.storage.Configuration qiniuConfig() {
return new com.qiniu.storage.Configuration(Zone.zone0());
}
/**
* 构建一个七牛上传工具实例
*/
@Bean
public UploadManager uploadManager() {
return new UploadManager(qiniuConfig());
}
@Value("${qiniu.AccessKey}")
private String accessKey;
@Value("${qiniu.SecretKey}")
private String secretKey;
/**
* 认证信息实例
* @return
*/
@Bean
public Auth auth() {
return Auth.create(accessKey, secretKey);
}
/**
* 构建七牛空间管理实例
*/
@Bean
public BucketManager bucketManager() {
return new BucketManager(auth(), qiniuConfig());
}
@Bean
public Gson gson() {
return new Gson();
}
}
4.实现七牛云上传文件的相关逻辑
package com.example.qiniuyun.service;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import java.io.File;
import java.io.InputStream;
/**
* 七牛上传文件服务
*/
public interface IQiniuUploadFileService {
Response uploadFile(File file) throws QiniuException;
Response uploadFile(InputStream inputStream) throws QiniuException;
Response delete(String key) throws QiniuException;
}
package com.example.qiniuyun.service.impl;
import com.example.qiniuyun.service.IQiniuUploadFileService;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.InputStream;
@Service
public class QiniuUploadFileServiceImpl implements IQiniuUploadFileService,InitializingBean {
@Autowired
private UploadManager uploadManager;
@Autowired
private BucketManager bucketManager;
@Autowired
private Auth auth;
@Value("${qiniu.Bucket}")
private String bucket;
/**
* 定义七牛云上传的相关策略
*/
private StringMap putPolicy;
/**
* 以文件的形式上传
* @param file
* @return
* @throws QiniuException
*/
@Override
public Response 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++;
}
return response;
}
/**
* 以流的形式上传
* @param inputStream
* @return
* @throws QiniuException
*/
@Override
public Response 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++;
}
return response;
}
/**
* 删除七牛云上的相关文件
* @param key
* @return
* @throws QiniuException
*/
@Override
public Response delete(String key) throws QiniuException {
Response response = bucketManager.delete(this.bucket, key);
int retry = 0;
while (response.needRetry() && retry++ < 3) {
response = bucketManager.delete(bucket, 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}}");
}
/**
* 获取上传凭证
* @return
*/
private String getUploadToken() {
return this.auth.uploadToken(bucket, null, 3600, putPolicy);
}
}
这样我们就实现了七牛云的文件上传和删除,当然我们也可以指定上传的策略,比如自己指定上传到七牛云上的文件的名称
,
若要自己指定更多的上传策略,可以参考七牛云的官方文档https://developer.qiniu.com/kodo/manual/1206/put-policy