SpringBoot整合七牛云图片上传
1、注册七牛云
注册登陆以后点击管理控制台
在对象存储中添加新的存储空间。
点击控制台右上角头像选择密钥管理
在密钥管理界面有AK和SK,这在后面的代码要用到。
接下来就是代码的编写了。
2、疑问
网上其他教程都在application.yml配置了相关的ak,sk,bucket以及baseuploadurl。我在七牛官方文档看好像并没有用到baseUploadUrl,七牛上传图片需要在本地缓存一个临时对象吗?希望有大佬看到我的问题可以帮忙解答。
3、编写相关实现代码
引入七牛云的相关依赖:
<!--七牛云-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.28</version>
</dependency>
<!--Gson包-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
Service层:
public class FileUtils {
/**
* Key
*/
private static final String ACCESS_KEY = "DdbkIzcFii8ydhwar6NvB7BEd6l7BN2rlSQ_kCVv";
/**
* 秘钥
*/
private static final String SECRET_KEY = "ISWtQwkwcJHMIPOcxuUaCHSmevV74RGsPPcj2zkO";
/**
* 存储桶
*/
private static final String BUCKET = "letui123";
private static final String BASE_URL = "http://q7ua44t5m.bkt.clouddn.com/";
/**
* 上传管理
*/
private static UploadManager uploadManager;
private FileUtils() {
//构造一个带指定 Region 对象的配置类
Configuration config = new Configuration(Region.region1());
uploadManager = new UploadManager(config);
}
private static UploadManager getInstance() {
if (uploadManager == null) {
new FileUtils();
}
return uploadManager;
}
/**
* 生成上传凭证Token
*
* @return
*/
public static String getToken() {
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
String upToken = auth.uploadToken(BUCKET);
System.out.println(upToken);
return upToken;
}
public static String upLoad(MultipartFile file) {
// 默认不指定key的情况下,以文件内容的hash值作为文件名
String key = System.currentTimeMillis()+".jpg";
String url="";
try {
InputStream inputStream = file.getInputStream();
// byte[] byteData = IOUtils.toByteArray(inputStream);//把流转字节数组
Response response = getInstance().put(inputStream, key, getToken(), null, null);
// Response response = getInstance().put(byteData, key, getToken());
//解析上传成功的结果
try {
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
url = BASE_URL+putRet.key;
} catch (QiniuException e) {
Response r = e.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
} catch (IOException e) {
e.printStackTrace();
}
return url;
}
}
Controller层
/**
* @param file
* @return 单上传
*/
@PostMapping(value = "/file")
public Result file(@RequestParam("file") MultipartFile file){
return Result.ok("filePath",FileUtils.upLoad(file));
}
/**
* 多上传
*/
@PostMapping(value = "/uploadfiles")
public Result fileS(HttpServletRequest request){
List successUploadFiles=new ArrayList(); //返回上传成功的文件名list给前端
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file"); //创建一个list接受前端发送的文件
List<String> list=new ArrayList<>();
for (MultipartFile m:files) { //用foreach处理list列表中的file
list.add(FileUtils.upLoad(m));
}
return Result.ok("filePath",list);//返回list
}