feat:七牛云上传

This commit is contained in:
dzc committed 2025-10-29 10:06:29 +08:00
1 parent a5ff990b9e
commit 26c3629f7d
9 files changed
+205 -48

No files matched your search

@@ -0,0 +1,27 @@
package com.bsd.pjcloud.admin.api.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "qn")
@Data
public class QnOssConfig {
private Oss oss;
@Data
public static class Oss {
private String accessKey;
private String secretKey;
private String bucketName;
private String domain;
}
}
@@ -0,0 +1,14 @@
package com.bsd.pjcloud.admin.api.vo.third;
import lombok.Data;
@Data
public class QnUploadVo {
public String fileHash;
public String fileName;
public String fullUrl;
}
+5
View File
@@ -33,6 +33,11 @@
<description>pjcloud 通用用户权限管理系统业务处理模块</description>
<dependencies>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.19.0, 7.19.99]</version>
</dependency>
<!-- 引入分布式事务-->
<dependency>
<groupId>com.bsd</groupId>
@@ -42,6 +42,7 @@ import org.springframework.http.HttpHeaders;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
import java.util.Objects;
/**
@@ -122,6 +123,14 @@ public class SysFileController {
return sysFileService.uploadFile(file, dir, groupId, type);
}
/**
* 七牛云上传
*/
@PostMapping(value = "/qn/upload")
public R<Map<String, String>> qnUpload(@RequestPart("file") MultipartFile file, @RequestParam(value = "dir", required = false) String dir, @RequestParam(value = "groupId", required = false) Long groupId, @RequestParam(value = "type", required = false) String type) {
return sysFileService.qnUpload(file, dir, groupId, type);
}
/**
* 获取文件
*
@@ -0,0 +1,11 @@
package com.bsd.pjcloud.admin.service;
import com.bsd.pjcloud.admin.api.vo.third.QnUploadVo;
import org.springframework.web.multipart.MultipartFile;
public interface QnOssService {
QnUploadVo upload(MultipartFile file, String fileName);
}
@@ -27,6 +27,7 @@ import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
* 文件管理
@@ -36,57 +37,66 @@ import java.util.List;
*/
public interface SysFileService extends IService<SysFile> {
/**
* 上传文件
* @param file 文件流
* @param dir 文件夹
* @param groupId 分组ID
* @param type 类型
* @return
*/
R uploadFile(MultipartFile file, String dir, Long groupId, String type);
/**
* 上传文件
*
* @param file 文件流
* @param dir 文件夹
* @param groupId 分组ID
* @param type 类型
* @return
*/
R uploadFile(MultipartFile file, String dir, Long groupId, String type);
R innerUpload(MultipartFile file, String dir, Long groupId, String type);
R innerUpload(MultipartFile file, String dir, Long groupId, String type);
/**
* 读取文件
* @param fileName 文件名称
* @param response 输出流
*/
void getFile(String fileName, HttpServletResponse response);
R<Map<String, String>> qnUpload(MultipartFile file, String dir, Long groupId, String type);
/**
* 删除文件
* @param id
* @return
*/
Boolean deleteFile(Long id);
/**
* 读取文件
*
* @param fileName 文件名称
* @param response 输出流
*/
void getFile(String fileName, HttpServletResponse response);
/**
* 查询文件组列表
* @param fileGroup SysFileGroup对象,用于筛选条件
* @return 包含文件组列表的Tree对象列表
*/
List<Tree<Long>> listFileGroup(SysFileGroup fileGroup);
/**
* 删除文件
*
* @param id
* @return
*/
Boolean deleteFile(Long id);
/**
* 添加或更新文件组
* @param fileGroup SysFileGroup对象,要添加或更新的文件组信息
* @return 添加或更新成功返回true,否则返回false
*/
Boolean saveOrUpdateGroup(SysFileGroup fileGroup);
/**
* 查询文件组列表
*
* @param fileGroup SysFileGroup对象,用于筛选条件
* @return 包含文件组列表的Tree对象列表
*/
List<Tree<Long>> listFileGroup(SysFileGroup fileGroup);
/**
* 删除文件组
* @param id 待删除文件组的ID
* @return 删除成功返回true,否则返回false
*/
Boolean deleteGroup(Long id);
/**
* 添加或更新文件组
*
* @param fileGroup SysFileGroup对象,要添加或更新的文件组信息
* @return 添加或更新成功返回true,否则返回false
*/
Boolean saveOrUpdateGroup(SysFileGroup fileGroup);
/**
* 移动文件组
* @param fileGroupDTO SysFileGroupDTO对象,要移动的文件组信息
* @return 移动成功返回true,否则返回false
*/
Boolean moveFileGroup(SysFileGroupDTO fileGroupDTO);
/**
* 删除文件组
*
* @param id 待删除文件组的ID
* @return 删除成功返回true,否则返回false
*/
Boolean deleteGroup(Long id);
/**
* 移动文件组
*
* @param fileGroupDTO SysFileGroupDTO对象,要移动的文件组信息
* @return 移动成功返回true,否则返回false
*/
Boolean moveFileGroup(SysFileGroupDTO fileGroupDTO);
}
@@ -29,11 +29,14 @@ import cn.hutool.crypto.SecureUtil;
import com.amazonaws.services.s3.model.S3Object;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.admin.api.config.QnOssConfig;
import com.bsd.pjcloud.admin.api.dto.SysFileGroupDTO;
import com.bsd.pjcloud.admin.api.entity.SysFile;
import com.bsd.pjcloud.admin.api.entity.SysFileGroup;
import com.bsd.pjcloud.admin.api.vo.third.QnUploadVo;
import com.bsd.pjcloud.admin.mapper.SysFileGroupMapper;
import com.bsd.pjcloud.admin.mapper.SysFileMapper;
import com.bsd.pjcloud.admin.service.QnOssService;
import com.bsd.pjcloud.admin.service.SysFileService;
import com.bsd.pjcloud.common.core.constant.CommonConstants;
import com.bsd.pjcloud.common.core.util.R;
@@ -70,6 +73,10 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
private final FileProperties properties;
private final QnOssConfig qnOssConfig;
private final QnOssService qnOssService;
/**
* 上传文件
*
@@ -116,10 +123,25 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileMapper, SysFile> impl
return R.ok(resultMap);
}
/**
* 七牛云上传
*/
@Override
public R<Map<String, String>> qnUpload(MultipartFile file, String dir, Long groupId, String type) {
String fileName = IdUtil.simpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename());
Map<String, String> resultMap = new HashMap<>(4);
QnUploadVo upload = qnOssService.upload(file, fileName);
resultMap.put("bucketName", qnOssConfig.getOss().getBucketName());
resultMap.put("fileName", fileName);
resultMap.put("url", upload.getFullUrl());
return R.ok(resultMap);
}
/**
* 读取文件
*
* @param bucket
* @param fileName
* @param response
*/
@@ -0,0 +1,54 @@
package com.bsd.pjcloud.admin.service.impl.third;
import com.alibaba.nacos.shaded.com.google.gson.Gson;
import com.bsd.pjcloud.admin.api.config.QnOssConfig;
import com.bsd.pjcloud.admin.api.vo.third.QnUploadVo;
import com.bsd.pjcloud.admin.service.QnOssService;
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 lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.InputStream;
@Slf4j
@Service
@RequiredArgsConstructor
public class QnOssServiceImpl implements QnOssService {
private final QnOssConfig qnOssConfig;
@Override
public QnUploadVo upload(MultipartFile file, String fileName) {
QnOssConfig.Oss oss = qnOssConfig.getOss();
Auth auth = Auth.create(oss.getAccessKey(), oss.getSecretKey());
String upToken = auth.uploadToken(oss.getBucketName());
Configuration config = Configuration.create(Region.region0());
config.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;
UploadManager uploadManager = new UploadManager(config);
try (InputStream inputStream = file.getInputStream()) {
Response response = uploadManager.put(inputStream, fileName, upToken, null, null);
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
QnUploadVo result = new QnUploadVo();
result.setFileHash(putRet.hash);
result.setFileName(fileName);
result.setFullUrl(oss.getDomain() + "/" + putRet.key);
return result;
} catch (Exception e) {
e.printStackTrace();
log.error("七牛云上传视频错误:{}", e.getMessage());
return null;
}
}
}
@@ -18,4 +18,9 @@ spring:
- optional:nacos:${spring.application.name}-@profiles.active@.yml
qn:
oss:
accessKey: IVrAjjdrTeZi14pqDd2s5kb_iAIGXATEMtOgmQUF
secretKey: SNhPscR3_xqX3E_B1XtMMWmLMrz7ipcguzNykQvo
bucketName: bizcabinet
domain: https://bizcabinet.zianxin.com