springboot整合七牛云
1.当我在做一个简单的后台管理系统时候· 需要制作一个接口来上传自己的图片
为此需要配合springboot整合 七牛云
导入依赖
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.7.0, 7.10.99]</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.6</version>
<scope>test</scope>
</dependency>
1.上传工具类 (${qiniu.accessKey}是springboot参数引用 需要在propertis 和yaml中配置) (官方文档中都有需求可以根据实际改)
/**
* 图片上传配置类
*
*/
@Component
public class ImageUtils {
@Value("${qiniu.accessKey}")
private String accessKey; //公钥
@Value("${qiniu.secretKey}")
private String accessSecretKey; //私钥
@Value("${qiniu.bucketName}")
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.南(根据自己的对象空间的地址选
Configuration cfg = new Configuration(Region.huanan());
//后来换了稳定的新加坡的空间并且绑定了个人域名没有做https的配置这时候要配置这个选项
/*
*域名不支持https访问会报错ssl验证error
*cfh.useHttpsDomains=false 关闭实列即可 默认是开启的
*/
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;
}
}
2.控制层创建接口
package com.example.yuenandemo1.M1.Controller;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.example.yuenandemo1.M1.Util.ImageUtils;
import com.example.yuenandemo1.M1.common.ResponseResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/api")
public class ImageController {
private String msg;
@Autowired
private ImageUtils imageUtils;
@CrossOrigin
@PostMapping("/image/upload")
public String uploadImage(@RequestParam(value = "file",required = false) MultipartFile[] multipartFile){
System.out.println("开始上传");
if(ObjectUtils.isEmpty(multipartFile)){
return msg="上传成功";
}
Map<String, List<String>> uploadImagesUrl = imageUtils.uploadImages(multipartFile);
return msg="上传成功";
}
}
3.前后端分离 前端(elemnt ui 有很多)提交页面 action提交接口地址
<template>
<div>
<el-upload
class="upload-demo"
action="http://localhost:8070/api/image/upload"
:on-preview="handlePreview"
:on-remove="handleRemove"
on-success=""
list-type="picture">
<el-button type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
</el-upload></div>
</template>
<script>
export default {
data() {
return {
};
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
}
}
}
</script>
<style scoped>
</style>
4.个人配置文件
freemarker:
suffix: .html
cache: false
servlet:
multipart:
max-file-size: 20MB
max-request-size: 20MB
#七牛云配置
qiniu:
# 公钥
accessKey: ########################
# 私钥
secretKey: ########################
# 存储空间名
bucketName: ########################
# 域名/路径
path: ########################
#这俩个是同样的
imageUrl ########################
# 空间里存储的文件名 不需要可以删除
documentName: