From 357f716de0763e47e518aed6b13469d6a09c36a4 Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Tue, 5 Apr 2022 12:41:38 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=96=87=E4=BB=B6=E7=BC=96=E8=BE=91):=20?= =?UTF-8?q?=E5=A4=9A=E6=AC=A1=E5=BC=95=E7=94=A8=E7=9A=84=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=BC=96=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qiwenshare/file/aop/WebLogAcpect.java | 2 - .../file/component/FileDealComp.java | 59 +++++++++++++++++++ .../file/controller/OfficeController.java | 36 +++-------- 3 files changed, 68 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java b/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java index daca9dd..4e52212 100644 --- a/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java +++ b/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java @@ -33,8 +33,6 @@ import java.util.Map; public class WebLogAcpect { @Resource IOperationLogService operationLogService; - @Resource - IUserService userService; private String operation = ""; private String module = ""; diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index f00b52e..b419caa 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -8,17 +8,28 @@ import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.file.api.*; import com.qiwenshare.file.config.es.FileSearch; import com.qiwenshare.file.domain.*; +import com.qiwenshare.file.mapper.FileMapper; import com.qiwenshare.file.mapper.UserFileMapper; import com.qiwenshare.file.util.TreeNode; import com.qiwenshare.ufop.factory.UFOPFactory; +import com.qiwenshare.ufop.operation.copy.Copier; +import com.qiwenshare.ufop.operation.copy.domain.CopyFile; +import com.qiwenshare.ufop.operation.download.Downloader; +import com.qiwenshare.ufop.operation.download.domain.DownloadFile; +import com.qiwenshare.ufop.operation.write.Writer; +import com.qiwenshare.ufop.operation.write.domain.WriteFile; import com.qiwenshare.ufop.util.UFOPUtils; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import javax.annotation.Resource; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,6 +48,8 @@ public class FileDealComp { @Resource UserFileMapper userFileMapper; @Resource + FileMapper fileMapper; + @Resource IUserService userService; @Resource IShareService shareService; @@ -44,6 +57,8 @@ public class FileDealComp { IShareFileService shareFileService; @Resource IUserFileService userFileService; + @Resource + UFOPFactory ufopFactory; @Autowired @Lazy @@ -352,4 +367,48 @@ public class FileDealComp { } return true; } + + /** + * 拷贝文件 + * 场景:修改的文件被多处引用时,需要重新拷贝一份,然后在新的基础上修改 + * @param fileBean + * @param userFile + * @return + */ + public String copyFile(FileBean fileBean, UserFile userFile) { + Copier copier = ufopFactory.getCopier(); + Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType()); + DownloadFile downloadFile = new DownloadFile(); + downloadFile.setFileUrl(fileBean.getFileUrl()); + CopyFile copyFile = new CopyFile(); + copyFile.setExtendName(userFile.getExtendName()); + String fileUrl = copier.copy(downloader.getInputStream(downloadFile), copyFile); + if (downloadFile.getOssClient() != null) { + downloadFile.getOssClient().shutdown(); + } + fileBean.setFileUrl(fileUrl); + fileBean.setFileId(null); + fileMapper.insert(fileBean); + userFile.setFileId(fileBean.getFileId()); + userFile.setUploadTime(DateUtil.getCurrentTime()); + userFileService.updateById(userFile); + return fileUrl; + } + + public String getIdentifierByFile(String fileUrl, int storageType) throws IOException { + DownloadFile downloadFile = new DownloadFile(); + downloadFile.setFileUrl(fileUrl); + InputStream inputStream = ufopFactory.getDownloader(storageType).getInputStream(downloadFile); + String md5Str = DigestUtils.md5Hex(inputStream); + return md5Str; + } + + public void saveFileInputStream(int storageType, String fileUrl, InputStream inputStream) throws IOException { + Writer writer1 = ufopFactory.getWriter(storageType); + WriteFile writeFile = new WriteFile(); + writeFile.setFileUrl(fileUrl); + int fileSize = inputStream.available(); + writeFile.setFileSize(fileSize); + writer1.write(inputStream, writeFile); + } } diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index 17b9cec..ba4db6d 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -12,6 +12,7 @@ import com.qiwenshare.common.util.security.SessionUtil; import com.qiwenshare.file.api.IFileService; import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserService; +import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.domain.FileBean; import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.dto.file.CreateOfficeFileDTO; @@ -55,7 +56,8 @@ public class OfficeController { IUserService userService; @Resource UFOPFactory ufopFactory; - + @Resource + FileDealComp fileDealComp; @Value("${deployment.host}") private String deploymentHost; @Value("${server.port}") @@ -231,51 +233,31 @@ public class OfficeController { UserFile userFile = userFileService.getById(userFileId); FileBean fileBean = fileService.getById(userFile.getFileId()); Long pointCount = fileService.getFilePointCount(userFile.getFileId()); + String fileUrl = fileBean.getFileUrl(); if (pointCount > 1) { - //该场景,暂不支持编辑修改 - writer.write("{\"error\":1}"); - return ; + fileUrl = fileDealComp.copyFile(fileBean, userFile); } URL url = new URL(downloadUri); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - int fileLength = 0; try { InputStream stream = connection.getInputStream(); + fileDealComp.saveFileInputStream(fileBean.getStorageType(), fileUrl, stream); - Writer writer1 = ufopFactory.getWriter(fileBean.getStorageType()); - WriteFile writeFile = new WriteFile(); - writeFile.setFileUrl(fileBean.getFileUrl()); - - writeFile.setFileSize(connection.getContentLength()); - writer1.write(stream, writeFile); } catch (Exception e) { log.error(e.getMessage()); } finally { - if ("2".equals(status)) { - LambdaUpdateWrapper userFileUpdateWrapper = new LambdaUpdateWrapper<>(); - userFileUpdateWrapper - .set(UserFile::getUploadTime, DateUtil.getCurrentTime()) - .eq(UserFile::getUserFileId, userFileId); - userFileService.update(userFileUpdateWrapper); - } - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - fileLength = connection.getContentLength(); + + int fileLength = connection.getContentLength(); log.info("当前修改文件大小为:" + Long.valueOf(fileLength)); DownloadFile downloadFile = new DownloadFile(); downloadFile.setFileUrl(fileBean.getFileUrl()); InputStream inputStream = ufopFactory.getDownloader(fileBean.getStorageType()).getInputStream(downloadFile); String md5Str = DigestUtils.md5Hex(inputStream); - lambdaUpdateWrapper - .set(FileBean::getIdentifier, md5Str) - .set(FileBean::getFileSize, Long.valueOf(fileLength)) - .set(FileBean::getModifyTime, DateUtil.getCurrentTime()) - .set(FileBean::getModifyUserId, userId) - .eq(FileBean::getFileId, fileBean.getFileId()); - fileService.update(lambdaUpdateWrapper); + fileService.updateFileDetail(userFile.getUserFileId(), md5Str, fileLength, userId); connection.disconnect(); } }