工具类
package com.ruoyi.common.utils;
import com.alibaba.fastjson2.JSONObject;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import com.ruoyi.common.utils.uuid.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.Objects;
public class OSSManageUtil {
// 设置好账号的ACCESS_KEY和SECRET_KEY
private static String ACCESS_KEY = "个人中心中找";
private static String SECRET_KEY = "个人中心中找";
// 要上传的空间(创建空间的名称)
private static String bucketName = "空间管理";
private static String QNYUrl= "域名空间(这个一般为前缀)";
// 密钥配置
private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
// 构造一个带指定Region对象的配置类
private static Configuration cfg = new Configuration(Region.huanan());
// ...其他参数参考类注释
private static UploadManager uploadManager = new UploadManager(cfg);
private static BucketManager bucketManager = new BucketManager(auth,cfg);
private static final Logger logger = LoggerFactory.getLogger(OSSManageUtil.class);
// 简单上传,使用默认策略,只需要设置上传的空间名就可以了
private static String getUpToken() {
return auth.uploadToken(bucketName);
}
public static String uploadFile(File file){
try {
if(file.length()<=0){
logger.error("七牛云上传文件为空");
}
int dotPos = file.getName().lastIndexOf(".");
if (dotPos < 0) {
return null;
}
String fileExt = file.getName().substring(dotPos + 1).toLowerCase();
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调用put方法上传
Response res = uploadManager.put(file, fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return JSONObject.parseObject(res.bodyString()).get("key").toString();
} else {
logger.error("七牛异常:" + res.bodyString());
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
logger.error("七牛异常:" + e.getMessage());
return null;
}
}
public static String uploadFile(byte[] data){
try {
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + ".jpg";
// 调用put方法上传
Response res = uploadManager.put(data, fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return JSONObject.parseObject(res.bodyString()).get("key").toString();
} else {
logger.error("七牛异常:" + res.bodyString());
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
logger.error("七牛异常:" + e.getMessage());
return null;
}
}
public static boolean deleteFile(String key){
if (Objects.isNull(checkFile(key))) {
return true;
} else {
try {
bucketManager.delete(bucketName, key);
return true;
} catch (QiniuException e) {
throw new RuntimeException(e.getMessage());
}
}
}
public static FileInfo checkFile(String key) {
FileInfo fileInfo = null;
try {
fileInfo = bucketManager.stat(bucketName, key);
} catch (QiniuException ignored) {
}
return fileInfo;
}
public static String getUrl(String key){
return auth.privateDownloadUrl(QNYUrl+"/"+key,(3600L * 24));
}
}
- 包括文件上传file(建议使用MultipartFile类 接收文件 可以使用MultipartFile把文件存在本地也可以直接转File 实测有效)成功后返回文件名
- 获取文件url路径 getUrl() 把文件名传入 成功返回url外链接地址
- 删除文件delet() 把文件名掺入 成功返回200状态码
上传文件保存本地
package com.lh.controller;
import com.lh.domain.WeighInfo;
import com.lh.mapper.WeighInfoMapper;
import com.lh.service.IHikVisionService;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.OSSManageUtil;
import lombok.val;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.*;
import java.util.List;
@RestController
@RequestMapping("/lh/test")
public class TController {
@Resource
public WeighInfoMapper weighInfoMapper;
@Resource
private IHikVisionService hikVisionService;
@Anonymous
@PostMapping("/pushFile")
public AjaxResult pushFile(MultipartFile file)
{
return AjaxResult.success(OSSManageUtil.uploadFile(readFile(file)));
}
@Anonymous
@GetMapping("/getUrl")
public AjaxResult getUrl(String key)
{
return AjaxResult.success(OSSManageUtil.getUrl(key));
}
private File readFile(MultipartFile file){
int n;
File newFile = new File(file.getOriginalFilename());
try (InputStream in = file.getInputStream(); OutputStream os = new FileOutputStream(newFile)) {
byte[] buffer = new byte[4096];
while ((n = in.read(buffer, 0, 4096)) != -1) {
os.write(buffer, 0, n);
}
System.out.println("获取文件成功,暂存目录" + newFile.getAbsolutePath());
} catch (IOException e) {
System.out.println("获取文件失败");
}
return newFile;
}
@Anonymous
@GetMapping("/deleteFile")
public AjaxResult deleteFile(Long weightId)
{
WeighInfo weighInfo = new WeighInfo();
weighInfo.setWeighId(weightId);
weighInfo.setImgType(30);
List<WeighInfo> weighInfoList = weighInfoMapper.selectWeighInfoList(weighInfo);
for (WeighInfo info : weighInfoList) {
OSSManageUtil.deleteFile(info.getPath());
}
return AjaxResult.success();
}
}
七牛云上传文件图片,前端需给到二进制的字符流形式。
七牛云配置
<!-- 七牛云 --> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.7.0, 7.10.99]</version> </dependency><!-- 文件上传工具类 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency>
MultipartFile详解
MultipartFile的属性 file.getOriginalFilename()与file.getName()的区别 MultipartFile与File互转_五月天的尾巴的博客-CSDN博客