|
@@ -1,11 +1,14 @@
|
|
|
package com.backendsys.modules.upload.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.io.file.FileNameUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.crypto.digest.DigestUtil;
|
|
|
import com.backendsys.exception.CustException;
|
|
|
import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
|
|
|
import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
|
|
|
+import com.backendsys.modules.system.entity.SysCommon;
|
|
|
+import com.backendsys.modules.system.service.SysCommonService;
|
|
|
import com.backendsys.modules.upload.dao.SysFileDao;
|
|
|
import com.backendsys.modules.upload.entity.SysFile;
|
|
|
import com.backendsys.modules.upload.service.SysFileMultipartService;
|
|
@@ -17,7 +20,9 @@ import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
import java.io.IOException;
|
|
|
import java.util.LinkedHashMap;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
@Service
|
|
|
public class SysFileMultipartServiceImpl implements SysFileMultipartService {
|
|
@@ -28,16 +33,33 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
|
|
|
private TencentCosService tencentCosService;
|
|
|
@Autowired
|
|
|
private SysFileDao sysFileDao;
|
|
|
+ @Autowired
|
|
|
+ private SysCommonService sysCommonService;
|
|
|
+
|
|
|
+
|
|
|
+ /*
|
|
|
+ 查一下 upload_id 多久会过期
|
|
|
+ */
|
|
|
|
|
|
// 初始化分块上传 (获得 upload_id, object_key)
|
|
|
@Override
|
|
|
- public Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id, Integer target) {
|
|
|
+ public Map<String, Object> initiateMultipartUpload(MultipartFile multipartFile, Long category_id) {
|
|
|
+
|
|
|
+ // 获得公共配置
|
|
|
+ List<SysCommon> sysCommonList = sysCommonService.getCommonByCategory("UPLOAD");
|
|
|
+ AtomicReference<Integer> UPLOAD_TARGET = new AtomicReference<>();
|
|
|
+ sysCommonList.stream().forEach(sysCommon -> {
|
|
|
+ if (sysCommon.getTag().equals("UPLOAD_TARGET")) UPLOAD_TARGET.set(Convert.toInt(sysCommon.getValue()));
|
|
|
+ });
|
|
|
+
|
|
|
+ System.out.println("[系统配置] 上传目标(-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云): " + UPLOAD_TARGET);
|
|
|
+
|
|
|
|
|
|
String upload_id = null;
|
|
|
String object_key = null;
|
|
|
|
|
|
// target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
|
|
|
- if (target == 1) {
|
|
|
+ if (UPLOAD_TARGET.get() == 1) {
|
|
|
InitiateMultipartUploadResult uploadResult = tencentCosService.initiateMultipartUpload(multipartFile);
|
|
|
upload_id = uploadResult.getUploadId();
|
|
|
object_key = uploadResult.getKey();
|
|
@@ -47,30 +69,19 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
|
|
|
throw new CustException("upload_id 或 object_key 不能为空");
|
|
|
}
|
|
|
|
|
|
- try {
|
|
|
- // 根据文件MD5 判断是否上传过文件 (如果上传过,则仅更新记录,不再上传文件)
|
|
|
- String md5 = DigestUtil.md5Hex(multipartFile.getInputStream());
|
|
|
- SysFile sysFileEntity = sysFileDao.selectOne(new LambdaQueryWrapper<SysFile>().eq(SysFile::getMd5, md5));
|
|
|
- if (sysFileEntity == null) {
|
|
|
- sysFileEntity = new SysFile();
|
|
|
- sysFileEntity.setCategory_id(category_id);
|
|
|
- sysFileEntity.setUser_id(httpRequestUtil.getUserId());
|
|
|
- sysFileEntity.setUpload_id(upload_id);
|
|
|
- sysFileEntity.setName(FileNameUtil.getName(object_key));
|
|
|
- sysFileEntity.setMd5(md5);
|
|
|
- sysFileEntity.setObject_key(object_key);
|
|
|
- sysFileDao.insert(sysFileEntity);
|
|
|
- } else {
|
|
|
- // [更新] 上传文件记录
|
|
|
- sysFileEntity.setCategory_id(category_id);
|
|
|
- sysFileEntity.setUpload_id(upload_id);
|
|
|
- sysFileEntity.setName(FileNameUtil.getName(object_key));
|
|
|
- sysFileEntity.setObject_key(object_key);
|
|
|
- sysFileDao.updateById(sysFileEntity);
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- throw new RuntimeException(e);
|
|
|
- }
|
|
|
+ // [新增] 上传文件记录
|
|
|
+ SysFile sysFileEntity = new SysFile();
|
|
|
+ sysFileEntity.setCategory_id(category_id);
|
|
|
+ sysFileEntity.setUser_id(httpRequestUtil.getUserId());
|
|
|
+ sysFileEntity.setUpload_id(upload_id);
|
|
|
+ sysFileEntity.setName(FileNameUtil.getName(object_key));
|
|
|
+ sysFileEntity.setObject_key(object_key);
|
|
|
+
|
|
|
+ sysFileEntity.setTarget(UPLOAD_TARGET.get());
|
|
|
+ sysFileEntity.setContent_type(multipartFile.getContentType());
|
|
|
+ sysFileEntity.setSize(multipartFile.getSize());
|
|
|
+ sysFileDao.insert(sysFileEntity);
|
|
|
+
|
|
|
|
|
|
Map<String, Object> resp = new LinkedHashMap<>();
|
|
|
resp.put("upload_id", upload_id);
|