feat:七牛云上传
This commit is contained in:
1 parent
a5ff990b9e
commit
26c3629f7d
9 files changed
+205
-48
No files matched your search
+27
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
+14
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
+9
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件
|
||||
*
|
||||
|
||||
+11
@@ -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);
|
||||
|
||||
}
|
||||
+56
-46
@@ -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);
|
||||
}
|
||||
+23
-1
@@ -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
|
||||
*/
|
||||
|
||||
+54
@@ -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
|
||||
Reference in new issue
Block a user