fix(文件编辑): 多次引用的文件支持编辑
This commit is contained in:
parent
e1ed307806
commit
357f716de0
@ -33,8 +33,6 @@ import java.util.Map;
|
||||
public class WebLogAcpect {
|
||||
@Resource
|
||||
IOperationLogService operationLogService;
|
||||
@Resource
|
||||
IUserService userService;
|
||||
|
||||
private String operation = "";
|
||||
private String module = "";
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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<UserFile> userFileUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
userFileUpdateWrapper
|
||||
.set(UserFile::getUploadTime, DateUtil.getCurrentTime())
|
||||
.eq(UserFile::getUserFileId, userFileId);
|
||||
userFileService.update(userFileUpdateWrapper);
|
||||
}
|
||||
LambdaUpdateWrapper<FileBean> 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();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user