!77 v1.0.8代码合并

Merge pull request !77 from MAC/develop
This commit is contained in:
MAC 2021-08-20 06:19:52 +00:00 committed by Gitee
commit 9397a42d88
49 changed files with 692 additions and 320 deletions

View File

@ -6,12 +6,12 @@
<parent> <parent>
<groupId>com.qiwenshare</groupId> <groupId>com.qiwenshare</groupId>
<artifactId>qiwenshare</artifactId> <artifactId>qiwenshare</artifactId>
<version>1.0.7</version> <version>1.0.8</version>
</parent> </parent>
<groupId>com.qiwenshare</groupId> <groupId>com.qiwenshare</groupId>
<artifactId>qiwen-file</artifactId> <artifactId>qiwen-file</artifactId>
<version>1.0.7-SNAPSHOT</version> <version>1.0.8-SNAPSHOT</version>
<name>qiwen-file</name> <name>qiwen-file</name>
<description>fileos.qiwenshare.com</description> <description>fileos.qiwenshare.com</description>
<packaging>jar</packaging> <packaging>jar</packaging>

View File

@ -71,10 +71,10 @@ public class GlobalExceptionHandlerAdvice {
/**-------- 自定义定异常处理方法 --------**/ /**-------- 自定义定异常处理方法 --------**/
@ExceptionHandler(CMSException.class) @ExceptionHandler(QiwenException.class)
@ResponseBody @ResponseBody
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestResult error(CMSException e) { public RestResult error(QiwenException e) {
e.printStackTrace(); e.printStackTrace();
log.error("全局异常捕获:" + e); log.error("全局异常捕获:" + e);
return RestResult.fail().message(e.getMessage()).code(e.getCode()); return RestResult.fail().message(e.getMessage()).code(e.getCode());

View File

@ -7,21 +7,21 @@ import lombok.Data;
* 自定义全局异常类 * 自定义全局异常类
*/ */
@Data @Data
public class CMSException extends RuntimeException { public class QiwenException extends RuntimeException {
private Integer code; private Integer code;
public CMSException(Integer code, String message) { public QiwenException(Integer code, String message) {
super(message); super(message);
this.code = code; this.code = code;
} }
public CMSException(ResultCodeEnum resultCodeEnum) { public QiwenException(ResultCodeEnum resultCodeEnum) {
super(resultCodeEnum.getMessage()); super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode(); this.code = resultCodeEnum.getCode();
} }
@Override @Override
public String toString() { public String toString() {
return "CMSException{" + "code=" + code + ", message=" + this.getMessage() + '}'; return "QiwenException{" + "code=" + code + ", message=" + this.getMessage() + '}';
} }
} }

View File

@ -12,7 +12,7 @@ public interface IFileService extends IService<FileBean> {
void increaseFilePointCount(Long fileId); void increaseFilePointCount(Long fileId);
void decreaseFilePointCount(Long fileId); void decreaseFilePointCount(Long fileId);
void unzipFile(long userFileId, int unzipMode, String filePath);

View File

@ -2,8 +2,8 @@ package com.qiwenshare.file.api;
import com.qiwenshare.file.domain.FileBean; import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.StorageBean; import com.qiwenshare.file.domain.StorageBean;
import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.file.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO; import com.qiwenshare.file.dto.file.UploadFileDTO;
import com.qiwenshare.file.dto.file.PreviewDTO; import com.qiwenshare.file.dto.file.PreviewDTO;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;

View File

@ -0,0 +1,10 @@
package com.qiwenshare.file.api;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qiwenshare.file.domain.UploadTaskDetail;
import java.util.List;
public interface IUploadTaskDetailService extends IService<UploadTaskDetail> {
List<Integer> getUploadedChunkNumList(String identifier);
}

View File

@ -0,0 +1,11 @@
package com.qiwenshare.file.api;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qiwenshare.file.domain.UploadTask;
import com.qiwenshare.file.domain.UploadTaskDetail;
import java.util.List;
public interface IUploadTaskService extends IService<UploadTask> {
}

View File

@ -11,10 +11,12 @@ import java.util.Map;
public interface IUserFileService extends IService<UserFile> { public interface IUserFileService extends IService<UserFile> {
List<UserFile> selectUserFileByNameAndPath(String fileName, String filePath, Long userId); List<UserFile> selectUserFileByNameAndPath(String fileName, String filePath, Long userId);
boolean isDirExist(String fileName, String filePath, long userId);
List<UserFile> selectSameUserFile(String fileName, String filePath, String extendName, Long userId); List<UserFile> selectSameUserFile(String fileName, String filePath, String extendName, Long userId);
void replaceUserFilePath(String filePath, String oldFilePath, Long userId); void replaceUserFilePath(String filePath, String oldFilePath, Long userId);
List<FileListVo> userFileList(UserFile userFile, Long beginCount, Long pageCount); List<FileListVo> userFileList(UserFile userFile, Long beginCount, Long pageCount);
void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId); void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId);
void userFileCopy(String oldfilePath, String newfilePath, String fileName, String extendName, long userId);
List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId); List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId);
Long selectCountByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId); Long selectCountByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId);

View File

@ -13,7 +13,7 @@ import com.qiwenshare.file.vo.file.FileListVo;
import com.qiwenshare.ufop.factory.UFOPFactory; import com.qiwenshare.ufop.factory.UFOPFactory;
import com.qiwenshare.ufop.operation.read.Reader; import com.qiwenshare.ufop.operation.read.Reader;
import com.qiwenshare.ufop.operation.read.domain.ReadFile; import com.qiwenshare.ufop.operation.read.domain.ReadFile;
import com.qiwenshare.ufop.util.PathUtil; import com.qiwenshare.ufop.util.UFOPUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -45,6 +45,7 @@ public class FileDealComp {
IShareFileService shareFileService; IShareFileService shareFileService;
@Resource @Resource
IUserFileService userFileService; IUserFileService userFileService;
@Autowired @Autowired
private IElasticSearchService elasticSearchService; private IElasticSearchService elasticSearchService;
public static Executor exec = Executors.newFixedThreadPool(10); public static Executor exec = Executors.newFixedThreadPool(10);
@ -64,11 +65,13 @@ public class FileDealComp {
String extendName = userFile.getExtendName(); String extendName = userFile.getExtendName();
Integer deleteFlag = userFile.getDeleteFlag(); Integer deleteFlag = userFile.getDeleteFlag();
Long userId = userFile.getUserId(); Long userId = userFile.getUserId();
int isDir = userFile.getIsDir();
LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserFile::getFilePath, savefilePath) lambdaQueryWrapper.eq(UserFile::getFilePath, savefilePath)
.eq(UserFile::getDeleteFlag, deleteFlag) .eq(UserFile::getDeleteFlag, deleteFlag)
.eq(UserFile::getUserId, userId) .eq(UserFile::getUserId, userId)
.eq(UserFile::getFileName, fileName); .eq(UserFile::getFileName, fileName)
.eq(UserFile::getIsDir, isDir);
if (userFile.getIsDir() == 0) { if (userFile.getIsDir() == 0) {
lambdaQueryWrapper.eq(UserFile::getExtendName, extendName); lambdaQueryWrapper.eq(UserFile::getExtendName, extendName);
} }
@ -87,7 +90,8 @@ public class FileDealComp {
lambdaQueryWrapper1.eq(UserFile::getFilePath, savefilePath) lambdaQueryWrapper1.eq(UserFile::getFilePath, savefilePath)
.eq(UserFile::getDeleteFlag, deleteFlag) .eq(UserFile::getDeleteFlag, deleteFlag)
.eq(UserFile::getUserId, userId) .eq(UserFile::getUserId, userId)
.eq(UserFile::getFileName, fileName + "(" + i + ")"); .eq(UserFile::getFileName, fileName + "(" + i + ")")
.eq(UserFile::getIsDir, isDir);
if (userFile.getIsDir() == 0) { if (userFile.getIsDir() == 0) {
lambdaQueryWrapper1.eq(UserFile::getExtendName, extendName); lambdaQueryWrapper1.eq(UserFile::getExtendName, extendName);
} }
@ -111,10 +115,10 @@ public class FileDealComp {
// 加锁防止并发情况下有重复创建目录情况 // 加锁防止并发情况下有重复创建目录情况
Lock lock = new ReentrantLock(); Lock lock = new ReentrantLock();
lock.lock(); lock.lock();
String parentFilePath = PathUtil.getParentPath(filePath); String parentFilePath = UFOPUtils.getParentPath(filePath);
while(parentFilePath.contains("/")) { while(parentFilePath.contains("/")) {
String fileName = parentFilePath.substring(parentFilePath.lastIndexOf("/") + 1); String fileName = parentFilePath.substring(parentFilePath.lastIndexOf("/") + 1);
parentFilePath = PathUtil.getParentPath(parentFilePath); parentFilePath = UFOPUtils.getParentPath(parentFilePath);
LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserFile::getFilePath, parentFilePath + FileConstant.pathSeparator) lambdaQueryWrapper.eq(UserFile::getFilePath, parentFilePath + FileConstant.pathSeparator)

View File

@ -1,39 +1,36 @@
package com.qiwenshare.file.controller; package com.qiwenshare.file.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.exception.NotLoginException;
import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.qiwenshare.common.operation.FileOperation; import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.common.util.FileUtil; import com.qiwenshare.file.advice.QiwenException;
import com.qiwenshare.file.api.*; 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.component.FileDealComp;
import com.qiwenshare.file.config.es.FileSearch; import com.qiwenshare.file.config.es.FileSearch;
import com.qiwenshare.file.domain.*; import com.qiwenshare.file.domain.TreeNode;
import com.qiwenshare.file.dto.*; import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.dto.file.BatchMoveFileDTO;
import com.qiwenshare.file.dto.file.CopyFileDTO;
import com.qiwenshare.file.dto.file.MoveFileDTO;
import com.qiwenshare.file.dto.file.*; import com.qiwenshare.file.dto.file.*;
import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.FileListVo;
import com.qiwenshare.ufop.factory.UFOPFactory; import com.qiwenshare.ufop.util.UFOPUtils;
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.rename.domain.RenameFile;
import com.qiwenshare.ufop.util.PathUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.StringUtil;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
@ -42,12 +39,7 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.*;
import java.util.*; import java.util.*;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import static com.qiwenshare.common.util.FileUtil.getFileExtendsByType;
@Tag(name = "file", description = "该接口为文件接口,主要用来做一些文件的基本操作,如创建目录,删除,移动,复制等。") @Tag(name = "file", description = "该接口为文件接口,主要用来做一些文件的基本操作,如创建目录,删除,移动,复制等。")
@RestController @RestController
@ -55,24 +47,18 @@ import static com.qiwenshare.common.util.FileUtil.getFileExtendsByType;
@RequestMapping("/file") @RequestMapping("/file")
public class FileController { public class FileController {
@Value("${ufop.storage-type}")
private Integer storageType;
@Resource @Resource
IFileService fileService; IFileService fileService;
@Resource @Resource
IUserService userService; IUserService userService;
@Resource @Resource
IUserFileService userFileService; IUserFileService userFileService;
@Resource
UFOPFactory ufopFactory;
@Autowired @Autowired
private ElasticsearchRestTemplate elasticsearchRestTemplate; private ElasticsearchRestTemplate elasticsearchRestTemplate;
@Resource @Resource
FileDealComp fileDealComp; FileDealComp fileDealComp;
public static Executor executor = Executors.newFixedThreadPool(20);
public static final String CURRENT_MODULE = "文件接口"; public static final String CURRENT_MODULE = "文件接口";
@ -84,8 +70,9 @@ public class FileController {
UserBean sessionUserBean = userService.getUserBeanByToken(token); UserBean sessionUserBean = userService.getUserBeanByToken(token);
List<UserFile> userFiles = userFileService.selectUserFileByNameAndPath(createFileDto.getFileName(), createFileDto.getFilePath(), sessionUserBean.getUserId()); boolean isDirExist = userFileService.isDirExist(createFileDto.getFileName(), createFileDto.getFilePath(), sessionUserBean.getUserId());
if (userFiles != null && !userFiles.isEmpty()) {
if (isDirExist) {
return RestResult.fail().message("同名文件已存在"); return RestResult.fail().message("同名文件已存在");
} }
@ -201,7 +188,7 @@ public class FileController {
List<FileListVo> fileList = null; List<FileListVo> fileList = null;
userFile.setFilePath(PathUtil.urlDecode(filePath)); userFile.setFilePath(UFOPUtils.urlDecode(filePath));
if (currentPage == 0 || pageCount == 0) { if (currentPage == 0 || pageCount == 0) {
fileList = userFileService.userFileList(userFile, 0L, 10L); fileList = userFileService.userFileList(userFile, 0L, 10L);
} else { } else {
@ -274,116 +261,43 @@ public class FileController {
if (sessionUserBean == null) { if (sessionUserBean == null) {
throw new NotLoginException(); throw new NotLoginException();
} }
UserFile userFile = userFileService.getById(unzipFileDto.getUserFileId());
FileBean fileBean = fileService.getById(userFile.getFileId());
File destFile = new File(PathUtil.getStaticPath() + "temp" + File.separator + fileBean.getFileUrl());
Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType());
DownloadFile downloadFile = new DownloadFile();
downloadFile.setFileUrl(fileBean.getFileUrl());
downloadFile.setFileSize(fileBean.getFileSize());
InputStream inputStream = downloader.getInputStream(downloadFile);
try { try {
FileUtils.copyInputStreamToFile(inputStream, destFile); fileService.unzipFile(unzipFileDto.getUserFileId(), unzipFileDto.getUnzipMode(), unzipFileDto.getFilePath());
} catch (IOException e) { } catch (QiwenException e) {
e.printStackTrace(); return RestResult.fail().message(e.getMessage());
} }
String extendName = userFile.getExtendName();
String unzipUrl = (PathUtil.getStaticPath() + "temp" + File.separator + fileBean.getFileUrl()).replace("." + extendName, "");
List<String> fileEntryNameList = new ArrayList<>();
if ("zip".equals(extendName)) {
fileEntryNameList = FileOperation.unzip(destFile, unzipUrl);
} else if ("rar".equals(extendName)) {
try {
fileEntryNameList = FileOperation.unrar(destFile, unzipUrl);
} catch (Exception e) {
e.printStackTrace();
log.error("rar解压失败" + e);
return RestResult.fail().message("rar解压失败");
}
} else {
return RestResult.fail().message("不支持的文件格式!");
}
if (destFile.exists()) {
destFile.delete();
}
for (int i = 0; i < fileEntryNameList.size(); i++){
String entryName = fileEntryNameList.get(i);
log.info("文件名:"+ entryName);
executor.execute(() -> {
String totalFileUrl = unzipUrl + entryName;
File currentFile = FileOperation.newFile(totalFileUrl);
FileBean tempFileBean = new FileBean();
UserFile saveUserFile = new UserFile();
saveUserFile.setUploadTime(DateUtil.getCurrentTime());
saveUserFile.setUserId(sessionUserBean.getUserId());
saveUserFile.setFilePath(FileUtil.pathSplitFormat(userFile.getFilePath() + entryName.replace(currentFile.getName(), "")).replace("\\", "/"));
if (currentFile.isDirectory()){
saveUserFile.setIsDir(1);
saveUserFile.setFileName(currentFile.getName());
}else{
String saveFileUrl = "";
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(currentFile);
CopyFile createFile = new CopyFile();
createFile.setExtendName(FileUtil.getFileExtendName(totalFileUrl));
saveFileUrl = ufopFactory.getCopier().copy(fileInputStream, createFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
log.info("关闭流");
fileInputStream.close();
System.gc();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
saveUserFile.setIsDir(0);
saveUserFile.setExtendName(FileUtil.getFileExtendName(totalFileUrl));
saveUserFile.setFileName(FileUtil.getFileNameNotExtend(currentFile.getName()));
tempFileBean.setFileSize(currentFile.length());
tempFileBean.setFileUrl(saveFileUrl);
tempFileBean.setPointCount(1);
tempFileBean.setStorageType(storageType);
boolean saveResult = fileService.save(tempFileBean);
if (saveResult) {
boolean result = currentFile.delete();
log.info("删除{}结果:{}",saveFileUrl, result);
}
}
saveUserFile.setFileId(tempFileBean.getFileId());
saveUserFile.setDeleteFlag(0);
userFileService.save(saveUserFile);
});
}
return RestResult.success(); return RestResult.success();
} }
@Operation(summary = "文件复制", description = "可以复制文件或者目录", tags = {"file"})
@RequestMapping(value = "/copyfile", method = RequestMethod.POST)
@MyLog(operation = "文件复制", module = CURRENT_MODULE)
@ResponseBody
public RestResult<String> copyFile(@RequestBody CopyFileDTO copyFileDTO, @RequestHeader("token") String token) {
UserBean sessionUserBean = userService.getUserBeanByToken(token);
if (sessionUserBean == null) {
throw new NotLoginException();
}
long userFileId = copyFileDTO.getUserFileId();
UserFile userFile = userFileService.getById(userFileId);
String oldfilePath = userFile.getFilePath();
String newfilePath = copyFileDTO.getFilePath();
String fileName = userFile.getFileName();
String extendName = userFile.getExtendName();
if (userFile.getIsDir() == 1) {
String testFilePath = oldfilePath + fileName + "/";
if (newfilePath.startsWith(testFilePath)) {
return RestResult.fail().message("原路径与目标路径冲突,不能移动");
}
}
userFileService.updateFilepathByFilepath(oldfilePath, newfilePath, fileName, extendName, sessionUserBean.getUserId());
return RestResult.success();
}
@Operation(summary = "文件移动", description = "可以移动文件或者目录", tags = {"file"}) @Operation(summary = "文件移动", description = "可以移动文件或者目录", tags = {"file"})
@RequestMapping(value = "/movefile", method = RequestMethod.POST) @RequestMapping(value = "/movefile", method = RequestMethod.POST)
@ -468,19 +382,19 @@ public class FileController {
} }
Long total = 0L; Long total = 0L;
if (fileType == FileUtil.OTHER_TYPE) { if (fileType == UFOPUtils.OTHER_TYPE) {
List<String> arrList = new ArrayList<>(); List<String> arrList = new ArrayList<>();
arrList.addAll(Arrays.asList(FileUtil.DOC_FILE)); arrList.addAll(Arrays.asList(UFOPUtils.DOC_FILE));
arrList.addAll(Arrays.asList(FileUtil.IMG_FILE)); arrList.addAll(Arrays.asList(UFOPUtils.IMG_FILE));
arrList.addAll(Arrays.asList(FileUtil.VIDEO_FILE)); arrList.addAll(Arrays.asList(UFOPUtils.VIDEO_FILE));
arrList.addAll(Arrays.asList(FileUtil.MUSIC_FILE)); arrList.addAll(Arrays.asList(UFOPUtils.MUSIC_FILE));
fileList = userFileService.selectFileNotInExtendNames(arrList,beginCount, pageCount, userId); fileList = userFileService.selectFileNotInExtendNames(arrList,beginCount, pageCount, userId);
total = userFileService.selectCountNotInExtendNames(arrList,beginCount, pageCount, userId); total = userFileService.selectCountNotInExtendNames(arrList,beginCount, pageCount, userId);
} else { } else {
fileList = userFileService.selectFileByExtendName(getFileExtendsByType(fileType), beginCount, pageCount,userId); fileList = userFileService.selectFileByExtendName(UFOPUtils.getFileExtendsByType(fileType), beginCount, pageCount,userId);
total = userFileService.selectCountByExtendName(getFileExtendsByType(fileType), beginCount, pageCount,userId); total = userFileService.selectCountByExtendName(UFOPUtils.getFileExtendsByType(fileType), beginCount, pageCount,userId);
} }
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();

View File

@ -1,24 +1,22 @@
package com.qiwenshare.file.controller; package com.qiwenshare.file.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.exception.NotLoginException;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.common.util.MimeUtils; import com.qiwenshare.common.util.MimeUtils;
import com.qiwenshare.file.api.IFileService; import com.qiwenshare.file.api.*;
import com.qiwenshare.file.api.IFiletransferService;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.api.IUserService;
import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.component.FileDealComp;
import com.qiwenshare.file.domain.*; import com.qiwenshare.file.domain.*;
import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.file.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO; import com.qiwenshare.file.dto.file.UploadFileDTO;
import com.qiwenshare.file.dto.file.PreviewDTO; import com.qiwenshare.file.dto.file.PreviewDTO;
import com.qiwenshare.file.service.StorageService; import com.qiwenshare.file.service.StorageService;
import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.FileListVo;
import com.qiwenshare.file.vo.file.UploadFileVo; import com.qiwenshare.file.vo.file.UploadFileVo;
import com.qiwenshare.ufop.util.PathUtil; import com.qiwenshare.ufop.constant.UploadFileStatusEnum;
import com.qiwenshare.ufop.util.UFOPUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -29,7 +27,6 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -53,6 +50,11 @@ public class FiletransferController {
FileDealComp fileDealComp; FileDealComp fileDealComp;
@Resource @Resource
StorageService storageService; StorageService storageService;
@Resource
IUploadTaskService uploadTaskService;
@Resource
IUploadTaskDetailService uploadTaskDetailService;
public static final String CURRENT_MODULE = "文件传输接口"; public static final String CURRENT_MODULE = "文件传输接口";
@ -82,16 +84,16 @@ public class FiletransferController {
userFile.setUserId(sessionUserBean.getUserId()); userFile.setUserId(sessionUserBean.getUserId());
String relativePath = uploadFileDto.getRelativePath(); String relativePath = uploadFileDto.getRelativePath();
if (relativePath.contains("/")) { if (relativePath.contains("/")) {
userFile.setFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/"); userFile.setFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/");
fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/", sessionUserBean.getUserId()); fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/", sessionUserBean.getUserId());
fileDealComp.deleteRepeatSubDirFile(uploadFileDto.getFilePath(), sessionUserBean.getUserId()); fileDealComp.deleteRepeatSubDirFile(uploadFileDto.getFilePath(), sessionUserBean.getUserId());
} else { } else {
userFile.setFilePath(uploadFileDto.getFilePath()); userFile.setFilePath(uploadFileDto.getFilePath());
} }
String fileName = uploadFileDto.getFilename(); String fileName = uploadFileDto.getFilename();
userFile.setFileName(FileUtil.getFileNameNotExtend(fileName)); userFile.setFileName(UFOPUtils.getFileNameNotExtend(fileName));
userFile.setExtendName(FileUtil.getFileExtendName(fileName)); userFile.setExtendName(UFOPUtils.getFileExtendName(fileName));
userFile.setDeleteFlag(0); userFile.setDeleteFlag(0);
List<FileListVo> userFileList = userFileService.userFileList(userFile, null, null); List<FileListVo> userFileList = userFileService.userFileList(userFile, null, null);
if (userFileList.size() <= 0) { if (userFileList.size() <= 0) {
@ -111,6 +113,33 @@ public class FiletransferController {
} else { } else {
uploadFileVo.setSkipUpload(false); uploadFileVo.setSkipUpload(false);
List<Integer> uploaded = uploadTaskDetailService.getUploadedChunkNumList(uploadFileDto.getIdentifier());
if (uploaded != null && !uploaded.isEmpty()) {
uploadFileVo.setUploaded(uploaded);
} else {
LambdaQueryWrapper<UploadTask> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UploadTask::getIdentifier, uploadFileDto.getIdentifier());
List<UploadTask> rslist = uploadTaskService.list(lambdaQueryWrapper);
if (rslist == null || rslist.isEmpty()) {
UploadTask uploadTask = new UploadTask();
uploadTask.setIdentifier(uploadFileDto.getIdentifier());
uploadTask.setUploadTime(DateUtil.getCurrentTime());
uploadTask.setUploadStatus(UploadFileStatusEnum.UNCOMPLATE.getCode());
uploadTask.setFileName(uploadFileDto.getFilename());
String relativePath = uploadFileDto.getRelativePath();
if (relativePath.contains("/")) {
uploadTask.setFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/");
} else {
uploadTask.setFilePath(uploadFileDto.getFilePath());
}
uploadTask.setExtendName(uploadTask.getExtendName());
uploadTask.setUserId(sessionUserBean.getUserId());
uploadTaskService.save(uploadTask);
}
}
} }
return RestResult.success().data(uploadFileVo); return RestResult.success().data(uploadFileVo);

View File

@ -20,7 +20,7 @@ import com.qiwenshare.ufop.operation.copy.domain.CopyFile;
import com.qiwenshare.ufop.operation.download.domain.DownloadFile; import com.qiwenshare.ufop.operation.download.domain.DownloadFile;
import com.qiwenshare.ufop.operation.write.Writer; import com.qiwenshare.ufop.operation.write.Writer;
import com.qiwenshare.ufop.operation.write.domain.WriteFile; import com.qiwenshare.ufop.operation.write.domain.WriteFile;
import com.qiwenshare.ufop.util.PathUtil; import com.qiwenshare.ufop.util.UFOPUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -89,7 +89,7 @@ public class OfficeController {
} else if ("pptx".equals(extendName)) { } else if ("pptx".equals(extendName)) {
templateFilePath = "template/PowerPoint.pptx"; templateFilePath = "template/PowerPoint.pptx";
} }
String templateFileUrl = PathUtil.getStaticPath() + templateFilePath; String templateFileUrl = UFOPUtils.getStaticPath() + templateFilePath;
FileInputStream fileInputStream = new FileInputStream(templateFileUrl); FileInputStream fileInputStream = new FileInputStream(templateFileUrl);
Copier copier = ufopFactory.getCopier(); Copier copier = ufopFactory.getCopier();
CopyFile copyFile = new CopyFile(); CopyFile copyFile = new CopyFile();

View File

@ -1,11 +1,8 @@
package com.qiwenshare.file.controller; package com.qiwenshare.file.controller;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.anno.MyLog;
import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.exception.NotLoginException;
import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.result.RestResult;
import com.qiwenshare.file.api.IRecoveryFileService; import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserFileService;
@ -13,8 +10,8 @@ import com.qiwenshare.file.api.IUserService;
import com.qiwenshare.file.domain.RecoveryFile; import com.qiwenshare.file.domain.RecoveryFile;
import com.qiwenshare.file.domain.UserBean; import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.dto.BatchDeleteRecoveryFileDTO; import com.qiwenshare.file.dto.file.DeleteRecoveryFileDTO;
import com.qiwenshare.file.dto.DeleteRecoveryFileDTO; import com.qiwenshare.file.dto.recoveryfile.BatchDeleteRecoveryFileDTO;
import com.qiwenshare.file.dto.recoveryfile.RestoreFileDTO; import com.qiwenshare.file.dto.recoveryfile.RestoreFileDTO;
import com.qiwenshare.file.vo.file.RecoveryFileListVo; import com.qiwenshare.file.vo.file.RecoveryFileListVo;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;

View File

@ -218,6 +218,9 @@ public class ShareController {
LambdaQueryWrapper<Share> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<Share> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(Share::getShareBatchNum, checkEndTimeDTO.getShareBatchNum()); lambdaQueryWrapper.eq(Share::getShareBatchNum, checkEndTimeDTO.getShareBatchNum());
Share share = shareService.getOne(lambdaQueryWrapper); Share share = shareService.getOne(lambdaQueryWrapper);
if (share == null) {
return RestResult.fail().message("文件不存在!");
}
String endTime = share.getEndTime(); String endTime = share.getEndTime();
Date endTimeDate = null; Date endTimeDate = null;
try { try {

View File

@ -0,0 +1,42 @@
package com.qiwenshare.file.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import javax.persistence.*;
@Data
@Table(name = "uploadtask")
@Entity
@TableName("uploadtask")
public class UploadTask {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId(type = IdType.AUTO)
@Column(columnDefinition = "bigint(20)")
private Long uploadTaskId;
@Column(columnDefinition = "bigint(20)")
private Long userId;
@Column(columnDefinition="varchar(32)")
private String identifier;
@Column(columnDefinition="varchar(100)")
private String fileName;
@Column(columnDefinition="varchar(500)")
private String filePath;
@Column(columnDefinition="varchar(100)")
private String extendName;
@Column(columnDefinition="varchar(25)")
private String uploadTime;
@Column(columnDefinition="int(1)")
private int uploadStatus;
}

View File

@ -0,0 +1,42 @@
package com.qiwenshare.file.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import javax.persistence.*;
@Data
@Table(name = "uploadtaskdetail")
@Entity
@TableName("uploadtaskdetail")
public class UploadTaskDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@TableId(type = IdType.AUTO)
@Column(columnDefinition="bigint(20)")
private Long uploadTaskDetailId;
@Column(columnDefinition="varchar(500)")
private String filePath;
@Column(columnDefinition="varchar(100)")
private String filename;
@Column(columnDefinition="int(5)")
private int chunkNumber;
@Column(columnDefinition="bigint(10)")
private Integer chunkSize;
@Column(columnDefinition="varchar(500)")
private String relativePath;
@Column(columnDefinition="int(5)")
private Integer totalChunks;
@Column(columnDefinition="bigint(10)")
private Integer totalSize;
@Column(columnDefinition="varchar(32)")
private String identifier;
}

View File

@ -1,12 +0,0 @@
package com.qiwenshare.file.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(name = "批量删除回收文件DTO",required = true)
public class BatchDeleteRecoveryFileDTO {
@Schema(description = "回收用户文件id")
private String recoveryFileIds;
}

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -0,0 +1,15 @@
package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(name = "复制文件DTO",required = true)
public class CopyFileDTO {
@Schema(description = "用户文件id", required = true)
private long userFileId;
@Schema(description = "文件路径", required = true)
private String filePath;
}

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -9,10 +9,9 @@ public class UnzipFileDTO {
@Schema(description = "文件url", required = true) @Schema(description = "文件url", required = true)
private long userFileId; private long userFileId;
@Schema(description = "文件url", required = true) @Schema(description = "解压模式 0-解压到当前文件夹, 1-自动创建该文件名目录,并解压到目录里, 3-手动选择解压目录", required = true)
@Deprecated private int unzipMode;
private String fileUrl;
@Schema(description = "文件路径", required = true) @Schema(description = "解压目的文件目录,仅当 unzipMode 为 2 时必传")
@Deprecated
private String filePath; private String filePath;
} }

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.file;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;

View File

@ -1,9 +1,11 @@
package com.qiwenshare.file.dto.recoveryfile; package com.qiwenshare.file.dto.recoveryfile;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(name = "批量删除回收文件DTO",required = true) @Schema(name = "批量删除回收文件DTO",required = true)
public class BatchDeleteRecoveryFileDTO { public class BatchDeleteRecoveryFileDTO {
@Schema(description="恢复文件集合") @Schema(description="恢复文件集合")
private String recoveryFiles; private String recoveryFileIds;
} }

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.dto; package com.qiwenshare.file.dto.recoveryfile;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;

View File

@ -0,0 +1,10 @@
package com.qiwenshare.file.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiwenshare.file.domain.UploadTaskDetail;
import java.util.List;
public interface UploadTaskDetailMapper extends BaseMapper<UploadTaskDetail> {
List<Integer> selectUploadedChunkNumList(String identifier);
}

View File

@ -0,0 +1,11 @@
package com.qiwenshare.file.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qiwenshare.file.domain.UploadTask;
import com.qiwenshare.file.domain.UploadTaskDetail;
import java.util.List;
public interface UploadTaskMapper extends BaseMapper<UploadTask> {
}

View File

@ -17,6 +17,16 @@ public interface UserFileMapper extends BaseMapper<UserFile> {
void updateFilepathByPathAndName(String oldfilePath, String newfilePath, String fileName, String extendName, long userId); void updateFilepathByPathAndName(String oldfilePath, String newfilePath, String fileName, String extendName, long userId);
void updateFilepathByFilepath(String oldfilePath, String newfilePath, long userId); void updateFilepathByFilepath(String oldfilePath, String newfilePath, long userId);
void batchInsertByPathAndName(@Param("oldFilePath") String oldFilePath,
@Param("newFilePath") String newfilePath,
@Param("fileName") String fileName,
@Param("extendName") String extendName,
@Param("userId") long userId);
void batchInsertByFilepath(@Param("oldFilePath") String oldFilePath,
@Param("newFilePath") String newfilePath,
@Param("userId") long userId);
List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId); List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId);
Long selectCountByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId); Long selectCountByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId);
List<FileListVo> selectFileNotInExtendNames(List<String> fileNameList, Long beginCount, Long pageCount, long userId); List<FileListVo> selectFileNotInExtendNames(List<String> fileNameList, Long beginCount, Long pageCount, long userId);

View File

@ -1,23 +1,55 @@
package com.qiwenshare.file.service; package com.qiwenshare.file.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.common.operation.FileOperation;
import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.file.advice.QiwenException;
import com.qiwenshare.file.api.IFileService; import com.qiwenshare.file.api.IFileService;
import com.qiwenshare.file.component.FileDealComp;
import com.qiwenshare.file.domain.FileBean; import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.mapper.FileMapper; import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
import com.qiwenshare.ufop.factory.UFOPFactory;
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.util.UFOPUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
public class FileService extends ServiceImpl<FileMapper, FileBean> implements IFileService { public class FileService extends ServiceImpl<FileMapper, FileBean> implements IFileService {
public static Executor executor = Executors.newFixedThreadPool(20);
@Resource @Resource
FileMapper fileMapper; FileMapper fileMapper;
@Resource
UserFileMapper userFileMapper;
@Resource
UFOPFactory ufopFactory;
@Value("${ufop.storage-type}")
private Integer storageType;
@Resource
FileDealComp fileDealComp;
@Override @Override
public void increaseFilePointCount(Long fileId) { public void increaseFilePointCount(Long fileId) {
@ -37,5 +69,152 @@ public class FileService extends ServiceImpl<FileMapper, FileBean> implements IF
fileMapper.updateById(fileBean); fileMapper.updateById(fileBean);
} }
@Override
public void unzipFile(long userFileId, int unzipMode, String filePath) {
UserFile userFile = userFileMapper.selectById(userFileId);
FileBean fileBean = fileMapper.selectById(userFile.getFileId());
File destFile = new File(UFOPUtils.getStaticPath() + "temp" + File.separator + fileBean.getFileUrl());
Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType());
DownloadFile downloadFile = new DownloadFile();
downloadFile.setFileUrl(fileBean.getFileUrl());
downloadFile.setFileSize(fileBean.getFileSize());
InputStream inputStream = downloader.getInputStream(downloadFile);
try {
FileUtils.copyInputStreamToFile(inputStream, destFile);
} catch (IOException e) {
e.printStackTrace();
}
String extendName = userFile.getExtendName();
String unzipUrl = UFOPUtils.getTempPath(fileBean.getFileUrl()).getAbsolutePath().replace("." + extendName, "");
List<String> fileEntryNameList = new ArrayList<>();
if ("zip".equals(extendName)) {
fileEntryNameList = FileOperation.unzip(destFile, unzipUrl);
} else if ("rar".equals(extendName)) {
try {
fileEntryNameList = FileOperation.unrar(destFile, unzipUrl);
} catch (Exception e) {
e.printStackTrace();
log.error("rar解压失败" + e);
throw new QiwenException(500001, "rar解压异常" + e.getMessage());
}
} else {
throw new QiwenException(500002, "不支持的文件格式!");
}
if (destFile.exists()) {
destFile.delete();
}
for (int i = 0; i < fileEntryNameList.size(); i++){
String entryName = fileEntryNameList.get(i);
log.info("文件名:"+ entryName);
executor.execute(() -> {
String totalFileUrl = unzipUrl + entryName;
File currentFile = new File(totalFileUrl);
FileBean tempFileBean = new FileBean();
UserFile saveUserFile = new UserFile();
saveUserFile.setUploadTime(DateUtil.getCurrentTime());
saveUserFile.setUserId(userFile.getUserId());
saveUserFile.setFilePath(UFOPUtils.pathSplitFormat(userFile.getFilePath() + entryName.replace(currentFile.getName(), "")).replace("\\", "/"));
if (currentFile.isDirectory()){
saveUserFile.setIsDir(1);
saveUserFile.setFileName(currentFile.getName());
}else{
FileInputStream fileInputStream = null;
FileInputStream fileInputStream1 = null;
try {
fileInputStream = new FileInputStream(currentFile);
String md5Str = DigestUtils.md5Hex(fileInputStream);
Map<String, Object> param = new HashMap<String, Object>();
param.put("identifier", md5Str);
List<FileBean> list = fileMapper.selectByMap(param);
if (list != null && !list.isEmpty()) { //文件已存在
increaseFilePointCount(list.get(0).getFileId());
saveUserFile.setFileId(list.get(0).getFileId());
} else { //文件不存在
fileInputStream1 = new FileInputStream(currentFile);
CopyFile createFile = new CopyFile();
createFile.setExtendName(UFOPUtils.getFileExtendName(totalFileUrl));
String saveFileUrl = ufopFactory.getCopier().copy(fileInputStream1, createFile);
tempFileBean.setFileSize(currentFile.length());
tempFileBean.setFileUrl(saveFileUrl);
tempFileBean.setPointCount(1);
tempFileBean.setStorageType(storageType);
tempFileBean.setIdentifier(md5Str);
fileMapper.insert(tempFileBean);
saveUserFile.setFileId(tempFileBean.getFileId());
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
log.info("关闭流");
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileInputStream1 != null) {
try {
log.info("关闭流");
fileInputStream1.close();
System.gc();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
currentFile.delete();
}
}
saveUserFile.setIsDir(0);
saveUserFile.setExtendName(UFOPUtils.getFileExtendName(totalFileUrl));
saveUserFile.setFileName(UFOPUtils.getFileNameNotExtend(currentFile.getName()));
}
saveUserFile.setDeleteFlag(0);
if (unzipMode == 1) {
String destFilePath = "/" + userFile.getFilePath() + saveUserFile.getFilePath();
saveUserFile.setFilePath(destFilePath);
} else if(unzipMode == 2) {
saveUserFile.setFilePath(filePath);
}
String fileName = fileDealComp.getRepeatFileName(saveUserFile, saveUserFile.getFilePath());
if (saveUserFile.getIsDir() == 1 && !fileName.equals(saveUserFile.getFileName())) {
//如果是目录而且重复什么也不做
} else {
saveUserFile.setFileName(fileName);
userFileMapper.insert(saveUserFile);
}
});
}
}
} }

View File

@ -1,37 +1,16 @@
package com.qiwenshare.file.service; package com.qiwenshare.file.service;
import java.io.*;
import java.util.List;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qiwenshare.common.constant.FileConstant;
import com.qiwenshare.common.operation.FileOperation;
import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.DateUtil;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.api.IFiletransferService;
import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.component.FileDealComp;
import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.domain.*;
import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.file.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO; import com.qiwenshare.file.dto.file.UploadFileDTO;
import com.qiwenshare.file.dto.file.PreviewDTO; import com.qiwenshare.file.dto.file.PreviewDTO;
import com.qiwenshare.file.mapper.FileMapper; import com.qiwenshare.file.mapper.*;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.StorageBean;
import com.qiwenshare.file.mapper.StorageMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.FileListVo;
import com.qiwenshare.ufop.constant.StorageTypeEnum; import com.qiwenshare.ufop.constant.StorageTypeEnum;
import com.qiwenshare.ufop.constant.UploadFileStatusEnum; import com.qiwenshare.ufop.constant.UploadFileStatusEnum;
@ -47,12 +26,21 @@ import com.qiwenshare.ufop.operation.preview.domain.PreviewFile;
import com.qiwenshare.ufop.operation.upload.Uploader; import com.qiwenshare.ufop.operation.upload.Uploader;
import com.qiwenshare.ufop.operation.upload.domain.UploadFile; import com.qiwenshare.ufop.operation.upload.domain.UploadFile;
import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult; import com.qiwenshare.ufop.operation.upload.domain.UploadFileResult;
import com.qiwenshare.ufop.util.PathUtil; import com.qiwenshare.ufop.util.UFOPUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@Slf4j @Slf4j
@Service @Service
@Transactional(rollbackFor=Exception.class) @Transactional(rollbackFor=Exception.class)
@ -70,6 +58,10 @@ public class FiletransferService implements IFiletransferService {
UFOPFactory ufopFactory; UFOPFactory ufopFactory;
@Resource @Resource
FileDealComp fileDealComp; FileDealComp fileDealComp;
@Resource
UploadTaskDetailMapper UploadTaskDetailMapper;
@Resource
UploadTaskMapper uploadTaskMapper;
@Override @Override
public void uploadFile(HttpServletRequest request, UploadFileDTO uploadFileDto, Long userId) { public void uploadFile(HttpServletRequest request, UploadFileDTO uploadFileDto, Long userId) {
@ -93,7 +85,8 @@ public class FiletransferService implements IFiletransferService {
UploadFileResult uploadFileResult = uploadFileResultList.get(i); UploadFileResult uploadFileResult = uploadFileResultList.get(i);
FileBean fileBean = new FileBean(); FileBean fileBean = new FileBean();
BeanUtil.copyProperties(uploadFileDto, fileBean); BeanUtil.copyProperties(uploadFileDto, fileBean);
// fileBean.setTimeStampName(uploadFile.getTimeStampName()); String relativePath = uploadFileDto.getRelativePath();
if (UploadFileStatusEnum.SUCCESS.equals(uploadFileResult.getStatus())){ if (UploadFileStatusEnum.SUCCESS.equals(uploadFileResult.getStatus())){
fileBean.setFileUrl(uploadFileResult.getFileUrl()); fileBean.setFileUrl(uploadFileResult.getFileUrl());
fileBean.setFileSize(uploadFileResult.getFileSize()); fileBean.setFileSize(uploadFileResult.getFileSize());
@ -101,10 +94,10 @@ public class FiletransferService implements IFiletransferService {
fileBean.setPointCount(1); fileBean.setPointCount(1);
fileMapper.insert(fileBean); fileMapper.insert(fileBean);
UserFile userFile = new UserFile(); UserFile userFile = new UserFile();
String relativePath = uploadFileDto.getRelativePath();
if (relativePath.contains("/")) { if (relativePath.contains("/")) {
userFile.setFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/"); userFile.setFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/");
fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + PathUtil.getParentPath(relativePath) + "/", userId); fileDealComp.restoreParentFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/", userId);
fileDealComp.deleteRepeatSubDirFile(uploadFileDto.getFilePath(), userId); fileDealComp.deleteRepeatSubDirFile(uploadFileDto.getFilePath(), userId);
} else { } else {
@ -126,9 +119,45 @@ public class FiletransferService implements IFiletransferService {
userFileMapper.insert(userFile); userFileMapper.insert(userFile);
fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); fileDealComp.uploadESByUserFileId(userFile.getUserFileId());
}
LambdaQueryWrapper<UploadTaskDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UploadTaskDetail::getIdentifier, uploadFileDto.getIdentifier());
UploadTaskDetailMapper.delete(lambdaQueryWrapper);
LambdaUpdateWrapper<UploadTask> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(UploadTask::getUploadStatus, UploadFileStatusEnum.SUCCESS.getCode())
.eq(UploadTask::getIdentifier, uploadFileDto.getIdentifier());
uploadTaskMapper.update(null, lambdaUpdateWrapper);
} else if (UploadFileStatusEnum.UNCOMPLATE.equals(uploadFileResult.getStatus())) {
UploadTaskDetail UploadTaskDetail = new UploadTaskDetail();
UploadTaskDetail.setFilePath(uploadFileDto.getFilePath());
if (relativePath.contains("/")) {
UploadTaskDetail.setFilePath(uploadFileDto.getFilePath() + UFOPUtils.getParentPath(relativePath) + "/");
} else {
UploadTaskDetail.setFilePath(uploadFileDto.getFilePath());
}
UploadTaskDetail.setFilename(uploadFileDto.getFilename());
UploadTaskDetail.setChunkNumber(uploadFileDto.getChunkNumber());
UploadTaskDetail.setChunkSize((int)uploadFileDto.getChunkSize());
UploadTaskDetail.setRelativePath(uploadFileDto.getRelativePath());
UploadTaskDetail.setTotalChunks(uploadFileDto.getTotalChunks());
UploadTaskDetail.setTotalSize((int)uploadFileDto.getTotalSize());
UploadTaskDetail.setIdentifier(uploadFileDto.getIdentifier());
UploadTaskDetailMapper.insert(UploadTaskDetail);
} else if (UploadFileStatusEnum.FAIL.equals(uploadFileResult.getStatus())) {
LambdaQueryWrapper<UploadTaskDetail> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UploadTaskDetail::getIdentifier, uploadFileDto.getIdentifier());
UploadTaskDetailMapper.delete(lambdaQueryWrapper);
LambdaUpdateWrapper<UploadTask> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(UploadTask::getUploadStatus, UploadFileStatusEnum.FAIL.getCode())
.eq(UploadTask::getIdentifier, uploadFileDto.getIdentifier());
uploadTaskMapper.update(null, lambdaUpdateWrapper);
}
} }
} }
@Override @Override
@ -157,7 +186,7 @@ public class FiletransferService implements IFiletransferService {
.eq(UserFile::getDeleteFlag, 0); .eq(UserFile::getDeleteFlag, 0);
List<UserFile> userFileList = userFileMapper.selectList(lambdaQueryWrapper); List<UserFile> userFileList = userFileMapper.selectList(lambdaQueryWrapper);
String staticPath = PathUtil.getStaticPath(); String staticPath = UFOPUtils.getStaticPath();
String tempPath = staticPath + "temp" + File.separator; String tempPath = staticPath + "temp" + File.separator;
File tempDirFile = new File(tempPath); File tempDirFile = new File(tempPath);
if (!tempDirFile.exists()) { if (!tempDirFile.exists()) {
@ -224,10 +253,10 @@ public class FiletransferService implements IFiletransferService {
Downloader downloader = ufopFactory.getDownloader(StorageTypeEnum.LOCAL.getCode()); Downloader downloader = ufopFactory.getDownloader(StorageTypeEnum.LOCAL.getCode());
DownloadFile downloadFile = new DownloadFile(); DownloadFile downloadFile = new DownloadFile();
downloadFile.setFileUrl("temp" + File.separator+userFile.getFileName() + ".zip"); downloadFile.setFileUrl("temp" + File.separator+userFile.getFileName() + ".zip");
File tempFile = FileOperation.newFile(PathUtil.getStaticPath() + downloadFile.getFileUrl()); File tempFile = new File(UFOPUtils.getStaticPath() + downloadFile.getFileUrl());
httpServletResponse.setContentLengthLong(tempFile.length()); httpServletResponse.setContentLengthLong(tempFile.length());
downloader.download(httpServletResponse, downloadFile); downloader.download(httpServletResponse, downloadFile);
String zipPath = PathUtil.getStaticPath() + "temp" + File.separator+userFile.getFileName() + ".zip"; String zipPath = UFOPUtils.getStaticPath() + "temp" + File.separator+userFile.getFileName() + ".zip";
File file = new File(zipPath); File file = new File(zipPath);
if (file.exists()) { if (file.exists()) {
file.delete(); file.delete();

View File

@ -0,0 +1,22 @@
package com.qiwenshare.file.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.file.api.IUploadTaskDetailService;
import com.qiwenshare.file.domain.UploadTaskDetail;
import com.qiwenshare.file.mapper.UploadTaskDetailMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UploadTaskDetailService extends ServiceImpl<UploadTaskDetailMapper, UploadTaskDetail> implements IUploadTaskDetailService {
@Resource
UploadTaskDetailMapper uploadTaskDetailMapper;
@Override
public List<Integer> getUploadedChunkNumList(String identifier) {
return uploadTaskDetailMapper.selectUploadedChunkNumList(identifier);
}
}

View File

@ -0,0 +1,19 @@
package com.qiwenshare.file.service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.file.api.IUploadTaskDetailService;
import com.qiwenshare.file.api.IUploadTaskService;
import com.qiwenshare.file.domain.UploadTask;
import com.qiwenshare.file.domain.UploadTaskDetail;
import com.qiwenshare.file.mapper.UploadTaskDetailMapper;
import com.qiwenshare.file.mapper.UploadTaskMapper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
@Service
public class UploadTaskService extends ServiceImpl<UploadTaskMapper, UploadTask> implements IUploadTaskService {
}

View File

@ -43,10 +43,25 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
lambdaQueryWrapper.eq(UserFile::getFileName, fileName) lambdaQueryWrapper.eq(UserFile::getFileName, fileName)
.eq(UserFile::getFilePath, filePath) .eq(UserFile::getFilePath, filePath)
.eq(UserFile::getUserId, userId) .eq(UserFile::getUserId, userId)
.eq(UserFile::getDeleteFlag, "0"); .eq(UserFile::getDeleteFlag, 0);
return userFileMapper.selectList(lambdaQueryWrapper); return userFileMapper.selectList(lambdaQueryWrapper);
} }
@Override
public boolean isDirExist(String fileName, String filePath, long userId){
LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(UserFile::getFileName, fileName)
.eq(UserFile::getFilePath, filePath)
.eq(UserFile::getUserId, userId)
.eq(UserFile::getDeleteFlag, 0)
.eq(UserFile::getIsDir, 1);
List<UserFile> list = userFileMapper.selectList(lambdaQueryWrapper);
if (list != null && !list.isEmpty()) {
return true;
}
return false;
}
@Override @Override
public List<UserFile> selectSameUserFile(String fileName, String filePath, String extendName, Long userId) { public List<UserFile> selectSameUserFile(String fileName, String filePath, String extendName, Long userId) {
LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
@ -68,54 +83,6 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
return userFileMapper.userFileList(userFile, beginCount, pageCount); return userFileMapper.userFileList(userFile, beginCount, pageCount);
} }
// public void renameUserFile(Long userFileId, String newFileName, Long userId) {
// UserFile userFile = userFileMapper.selectById(userFileId);
// if (1 == userFile.getIsDir()) {
// LambdaUpdateWrapper<UserFile> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// lambdaUpdateWrapper.set(UserFile::getFileName, newFileName)
// .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
// .eq(UserFile::getUserFileId, userFile.getUserFileId());
// userFileMapper.update(null, lambdaUpdateWrapper);
// replaceUserFilePath(userFile.getFilePath() + newFileName + "/",
// userFile.getFilePath() + userFile.getFileName() + "/", userId);
// } else {
// FileBean fileBean = fileMapper.selectById(userFile.getFileId());
// if (fileBean.getIsOSS() == 1) {
//// LambdaQueryWrapper<UserFile> lambdaQueryWrapper = new LambdaQueryWrapper<>();
//// lambdaQueryWrapper.eq(UserFile::getUserFileId, renameFileDto.getUserFileId());
//// UserFile userFile = userFileService.getOne(lambdaQueryWrapper);
////
//// FileBean file = fileService.getById(userFile.getFileId());
// String fileUrl = fileBean.getFileUrl();
// String newFileUrl = fileUrl.replace(userFile.getFileName(), newFileName);
//
// AliyunOSSRename.rename(qiwenFileConfig.getAliyun().getOss(),
// fileUrl.substring(1),
// newFileUrl.substring(1));
// LambdaUpdateWrapper<FileBean> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// lambdaUpdateWrapper
// .set(FileBean::getFileUrl, newFileUrl)
// .eq(FileBean::getFileId, fileBean.getFileId());
// fileMapper.update(null, lambdaUpdateWrapper);
//
// LambdaUpdateWrapper<UserFile> userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// userFileLambdaUpdateWrapper
// .set(UserFile::getFileName, newFileName)
// .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
// .eq(UserFile::getUserFileId, userFileId);
// userFileMapper.update(null, userFileLambdaUpdateWrapper);
// } else {
// LambdaUpdateWrapper<UserFile> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
// lambdaUpdateWrapper.set(UserFile::getFileName, newFileName)
// .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
// .eq(UserFile::getUserFileId, userFileId);
// userFileMapper.update(null, lambdaUpdateWrapper);
// }
//
//
// }
// }
@Override @Override
public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) { public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) {
if ("null".equals(extendName)){ if ("null".equals(extendName)){
@ -139,6 +106,34 @@ public class UserFileService extends ServiceImpl<UserFileMapper, UserFile> impl
} }
@Override
public void userFileCopy(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) {
if ("null".equals(extendName)){
extendName = null;
}
userFileMapper.batchInsertByPathAndName(oldfilePath, newfilePath, fileName, extendName, userId);
//移动根目录
// userFileMapper.updateFilepathByPathAndName(oldfilePath, newfilePath, fileName, extendName, userId);
//移动子目录
oldfilePath = oldfilePath + fileName + "/";
newfilePath = newfilePath + fileName + "/";
oldfilePath = oldfilePath.replace("\\", "\\\\\\\\");
oldfilePath = oldfilePath.replace("'", "\\'");
oldfilePath = oldfilePath.replace("%", "\\%");
oldfilePath = oldfilePath.replace("_", "\\_");
if (extendName == null) { //为null说明是目录则需要移动子目录
userFileMapper.batchInsertByFilepath(oldfilePath, newfilePath, userId);
}
}
@Override @Override
public List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId) { public List<FileListVo> selectFileByExtendName(List<String> fileNameList, Long beginCount, Long pageCount, long userId) {

View File

@ -0,0 +1,15 @@
package com.qiwenshare.file.test;
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.List;
public class test {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
System.out.println(JSON.toJSONString(list));
}
}

View File

@ -16,8 +16,8 @@ logging.level.root=info
#mybatis配置 #mybatis配置
mybatis.type-aliases-package=com.qiwenshare.file.domain mybatis.type-aliases-package=com.qiwenshare.file.domain
mybatis.config-locations=classpath:mybatis/mybatis-config.xml mybatis.config-locations=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml mybatis.mapper-locations=classpath:mapper/*.xml
#mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl #mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
@ -44,7 +44,7 @@ spring.servlet.multipart.enabled=true
spring.main.allow-bean-definition-overriding=true spring.main.allow-bean-definition-overriding=true
mybatis-plus.type-aliases-package=com.qiwenshare.web.domain mybatis-plus.type-aliases-package=com.qiwenshare.web.domain
mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml mybatis-plus.mapper-locations=classpath:mapper/*.xml
mybatis-plus.configuration.map-underscore-to-camel-case=false mybatis-plus.configuration.map-underscore-to-camel-case=false
mybatis-plus.global-config.banner=false mybatis-plus.global-config.banner=false
@ -106,6 +106,6 @@ spring.elasticsearch.rest.password=
# 当前部署外网IP用于office预览 # 当前部署外网IP用于office预览
deployment.host: 192.168.31.158:${server.port} deployment.host=192.168.31.158:${server.port}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qiwenshare.file.mapper.UploadTaskDetailMapper">
<select id="selectUploadedChunkNumList" parameterType="java.lang.String" resultType="java.lang.Integer">
select chunkNumber from UploadTaskDetail
where identifier = #{identifier}
order by chunkNumber asc
</select>
</mapper>

View File

@ -96,6 +96,47 @@
and userId = #{param5} and userId = #{param5}
</update> </update>
<insert id="batchInsertByPathAndName">
insert into userfile ( deleteBatchNum, deleteFlag, deleteTime,
extendName, fileId, fileName, filePath, isDir, uploadTime, userId)
(select deleteBatchNum, deleteFlag, deleteTime, extendName, fileId,
fileName, #{newFilePath}, isDir, uploadTime, userId
from userfile
<where>
<if test="userId != 0">
and userId = #{userId}
</if>
<if test="fileName != null">
and fileName = #{fileName}
</if>
<if test="oldFilePath != null">
and filePath = #{oldFilePath}
</if>
<choose>
<when test="extendName != null">
and extendName = #{extendName}
</when>
<otherwise>
and isDir = 1
</otherwise>
</choose>
</where>
)
</insert>
<update id="batchInsertByFilepath">
insert into userfile ( deleteBatchNum, deleteFlag, deleteTime,
extendName, fileId, fileName, filePath, isDir, uploadTime, userId)
(select deleteBatchNum, deleteFlag, deleteTime, extendName, fileId,
fileName, REPLACE(filePath, #{oldFilePath}, #{newFilePath}), isDir,
uploadTime, userId
from userfile
where filePath like N'${oldFilePath}%' and userId = #{userId}
)
</update>
<select id="selectStorageSizeByUserId" resultType="java.lang.Long" parameterType="java.lang.Long"> <select id="selectStorageSizeByUserId" resultType="java.lang.Long" parameterType="java.lang.Long">
SELECT SUM(fileSize) FROM userfile SELECT SUM(fileSize) FROM userfile
LEFT JOIN file ON file.fileId = userfile.fileId LEFT JOIN file ON file.fileId = userfile.fileId

View File

@ -1,31 +0,0 @@
@echo off & setlocal enabledelayedexpansion
rem if need special jdk
rem JAVA_HOME="c:\Java\jdk1.8.0_191\"
rem PATH=%JAVA_HOME%\bin;%PATH%
rem enter app deploy path
cd ..\
set DEPLOY_PATH=%cd%
set CONF_DIR=%DEPLOY_PATH%/conf
set LIB_JARS=%DEPLOY_PATH%/lib/*
set LOG_PATH=%DEPLOY_PATH%/logs
set CLASSPATH=".;%CONF_DIR%;%LIB_JARS%"
set JAVA_HOME=%DEPLOY_PATH%
set PATH=%JAVA_HOME%\bin;%PATH%
set JAVA_VM=-D64 -server -Xmx512m -Xms512m -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
set JAVA_OPTIONS=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=8231
echo DEPLOY_PATH: %DEPLOY_PATH%
echo CLASSPATH=%CLASSPATH%
echo "Start App..."
java -version
start javaw %JAVA_VM% -classpath %CLASSPATH% com.qiwenshare.file.FileApplication
goto end
:end
pause