七牛云OOS使用
文件上传–专用文件服务器
1.导入七牛云的包
<!--七牛云SDK依赖包-->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.7.0, 7.10.99]</version>
</dependency>
2.编写工具类
采用字节上传的方式进行文件上传,将文件转换为字节再进行上传
url为存储空间的地址,即上传的位置
accessKey,accessSecretKey 为七牛云的密钥,通过配置文件编写,方便改动
import com.alibaba.fastjson.JSON;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
@Component
public class QiniuUtils {
public static final String url = "https://rsbpz36pl.hd-bkt.clouddn.com/";
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.accessSecretKey}")
private String accessSecretKey;
public boolean upload(MultipartFile file,String fileName){
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.huabei());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String bucket = "mszlu";
//默认不指定key的情况下,以文件内容的hash值作为文件名
try {
byte[] uploadBytes = file.getBytes();
Auth auth = Auth.create(accessKey, accessSecretKey);
String upToken = auth.uploadToken(bucket);
Response response = uploadManager.put(uploadBytes, fileName, upToken);
//解析上传成功的结果
DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);
return true;
} catch (Exception ex) {
ex.printStackTrace();
}
return false;
}
}
3.修改默认文件上传大小
# 上传文件总的最大值
spring.servlet.multipart.max-request-size=20MB
# 单个文件的最大值
spring.servlet.multipart.max-file-size=2MB
4.编写controller
@Autowired
private QiniuUtils qiniuUtils;
/**
* 文件上传
* @param file
* @return
*/
@PostMapping("/upload")
public Result upload(@RequestParam("image") MultipartFile file){
//file是一个临时文件,需要转存,不然本次请求之后会销毁
log.info(file.toString());
//原始文件名字
String originalFileName = file.getOriginalFilename();
String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
//使用UUID重新生成文件名,防止文件名称重复造成文件覆盖
String fileName = UUID.randomUUID().toString() + suffix;
//上传图片到图片服务器,降低自生应用服务器的带宽消耗
//这里使用 七牛云 按量付费,速度快
boolean upload = qiniuUtils.upload(file, fileName);
//上传成功 则返回文件的路径
if (upload){
return Result.success(QiniuUtils.url + fileName);
}
//上传失败 范围错误码
return Result.error(20001,"图片上传失败");
}