# 整合七牛云图床
# 依赖
<!--qiniu依赖-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.28</version>
</dependency>
# 配置
qiniu:
accessKey: xxxx
accessSecretKey: xxx
bucket: xxx
imageUrl: xxx
# 工具类
package com.base.utils;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
@Component
public class ImageUtils {
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.accessSecretKey}")
private String accessSecretKey;
@Value("${qiniu.bucket}")
private String bucket;
@Value("${qiniu.imageUrl}")
private String url;
/**
* 处理多文件
* @param multipartFiles
* @return
*/
public Map<String, List<String>> uploadImages(MultipartFile[] multipartFiles){
Map<String,List<String>> map = new HashMap<>();
List<String> imageUrls = new ArrayList<>();
for(MultipartFile file : multipartFiles){
imageUrls.add(uploadImageQiniu(file));
}
map.put("imageUrl",imageUrls);
return map;
}
/**
* 上传图片到七牛云
* @param multipartFile
* @return
*/
private String uploadImageQiniu(MultipartFile multipartFile){
try {
//1、获取文件上传的流
byte[] fileBytes = multipartFile.getBytes();
//2、创建日期目录分隔
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
String datePath = dateFormat.format(new Date());
//3、获取文件名
String originalFilename = multipartFile.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
String filename = datePath+"/"+ UUID.randomUUID().toString().replace("-", "")+ suffix;
//4.构造一个带指定 Region 对象的配置类
//Region.huabei(根据自己的对象空间的地址选
Configuration cfg = new Configuration(Region.huanan());
UploadManager uploadManager = new UploadManager(cfg);
//5.获取七牛云提供的 token
Auth auth = Auth.create(accessKey, accessSecretKey);
String upToken = auth.uploadToken(bucket);
uploadManager.put(fileBytes,filename,upToken);
return url+filename;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
# 控制器
package com.base.controller;
import cn.dev33.satoken.util.SaResult;
import com.base.utils.ImageUtils;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api")
public class ImageController {
@Autowired
private ImageUtils imageUtils;
@PostMapping("/image/upload")
@ApiOperation("上传")
public SaResult uploadImage(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile){
if(ObjectUtils.isEmpty(multipartFile)){
return SaResult.ok("请选择图片");
}
Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile);
return SaResult.data(uploadImagesUrl);
}
}
# 测试页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>测试上传</h1>
<form action="http://localhost:8080/api/image/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>
</body>
</html>