From 40de548aaa189f89d2e01066210ec0bb467b813d Mon Sep 17 00:00:00 2001 From: "echo.young" Date: Wed, 26 May 2021 17:39:10 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[deploy]=20=E9=80=82=E9=85=8Dcentos=20?= =?UTF-8?q?=E4=B8=8A=E9=83=A8=E7=BD=B2=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- file-web/src/main/script/start.sh | 21 ++++++----- install.sh | 61 +++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 install.sh diff --git a/file-web/src/main/script/start.sh b/file-web/src/main/script/start.sh index d4de9e0..4cd0280 100644 --- a/file-web/src/main/script/start.sh +++ b/file-web/src/main/script/start.sh @@ -34,15 +34,16 @@ STDOUT_FILE=${LOG_PATH}/nohup.out #if use self jdk,modify #JAVA_HOME="/usr/lib/jvm/jdk1.8.0_191" -if [ "${JAVA_HOME}" != "" ] ; then - export JAVA_HOME - export PATH=$PATH:JAVA_HOME/bin - echo JAVA_HOME:${JAVA_HOME} -else - echo "JAVA_HOME not set!!!" - exit 1 +if ! java -version &>/dev/null;then + if [ "${JAVA_HOME}" != "" ] ; then + export JAVA_HOME + export PATH=$PATH:JAVA_HOME/bin + echo JAVA_HOME:${JAVA_HOME} + else + echo "JAVA_HOME not set!!!" + exit 1 + fi fi - USER_VMARGS="-D64 -server -Xmx1g -Xms1g -Xmn521m -Xss256k " GC_OPTS="" @@ -84,7 +85,7 @@ echo "Using CONF_DIR: $CONF_DIR" CLASSPATH=".:$CONF_DIR:$LIB_JARS" -EXEC_CMDLINE="${JAVA_HOME}/bin/java -classpath ${CLASSPATH} ${USER_VMARGS} ${GC_OPTS} ${JAVA_JMX_OPTS} ${JAVA_DEBUG} ${JAVA_OPTS} com.qiwenshare.file.FileApplication" +EXEC_CMDLINE="java -classpath ${CLASSPATH} ${USER_VMARGS} ${GC_OPTS} ${JAVA_JMX_OPTS} ${JAVA_DEBUG} ${JAVA_OPTS} com.qiwenshare.file.FileApplication" echo "Start app command line: ${EXEC_CMDLINE}" >> $STDOUT_FILE echo "Starting $SERVER_NAME ..." @@ -104,4 +105,4 @@ while [ $COUNT -lt 120 ]; do done echo "Console File: $STDOUT_FILE" -echo "--------start app $SERVER_NAME on $(uname -n) (pid=$$)--------" \ No newline at end of file +echo "--------start app $SERVER_NAME on $(uname -n) (pid=$$)--------" diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..5cca83e --- /dev/null +++ b/install.sh @@ -0,0 +1,61 @@ +#/************************************************* +#* install.sh write by echo at Changsha. Hunan, 2021年 05月 24日 星期一 11:33:25 CST +#*************************************************/ +#!/bin/sh +function echo_dbg_p(){ + echo "echo_dbg, $@" +} +function usage(){ +echo -e "usages: $0 [H|h|help] [-h] [-s] + [H|h|help]: check the usages\n + []" +} + +#main +#maven install check +cmd_package=yum +if ! mvn -v >/dev/null;then + sudo $cmd_package install -y maven +fi +#java install check +if ! java -version &>/dev/null;then + sudo $cmd_package install -y java +fi +if ! mysql -V>/dev/null;then + sudo wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm; + sudo rpm -ivh mysql57-community-release-el7-9.noarch.rpm + sudo yum install -y mysql-server +fi +#build path check +#build_root_path=./ +settingDir=file-common/src/main/resources/conf/settings.xml + +mvn clean install -s $settingDir +sed -i "s#D:/temp_db#/tmp/#g" release/conf/config/application-dev.properties +echo_dbg_p "warning, PLS create mysql with name file, and set the password follow the file qiwen-file/file-web/src/main/resources/config/application-prod.properties" + +case $1 in + H|h|help) + usage + ;; + *) +# getopts :s:h表示这个命令接受2个带参数选项,分别是-h和-s + while getopts :s:h opt + do + case $opt in + s) + echo "-s=$OPTARG" + ;; + :) + echo "-$OPTARG needs an argument" + ;; + h) + echo "-h is set" + ;; + *) + echo "-$opt not recognized" + ;; + esac + done + ;; +esac From a5aeeaddda0170ec3bf96737204c11bf1d8b59dc Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Sun, 1 Aug 2021 08:07:31 +0000 Subject: [PATCH 2/3] =?UTF-8?q?!73=20=E6=96=B0=E5=BB=BA=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=92=8C=E8=A7=A3=E5=8E=8B=E9=80=82=E9=85=8D=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 19 +-- .../java/com/qiwenshare/file/anno/MyLog.java | 19 --- .../file/anno/ResponseResultBody.java | 13 -- .../com/qiwenshare/file/aop/WebLogAcpect.java | 5 +- .../file/component/FileDealComp.java | 8 +- .../file/controller/FileController.java | 117 ++++++++++++------ .../controller/FiletransferController.java | 4 +- .../file/controller/OfficeController.java | 80 +++--------- .../controller/RecoveryFileController.java | 2 +- .../file/controller/ShareController.java | 2 +- .../file/controller/TaskController.java | 1 - .../file/controller/UserController.java | 2 +- .../com/qiwenshare/file/domain/FileBean.java | 3 - .../file/dto/file/UnzipFileDTO.java | 5 + .../file/service/FiletransferService.java | 7 +- src/main/resources/build/assembly.xml | 8 ++ .../resources/config/application.properties | 13 +- src/main/resources/database/data.sql | 10 +- src/main/resources/static/template/Excel.xlsx | Bin 0 -> 6611 bytes .../resources/static/template/PowerPoint.pptx | 0 src/main/resources/static/template/Word.docx | 0 .../qiwenshare/file/ScpApplicationTests.java | 5 +- 22 files changed, 144 insertions(+), 179 deletions(-) delete mode 100644 src/main/java/com/qiwenshare/file/anno/MyLog.java delete mode 100644 src/main/java/com/qiwenshare/file/anno/ResponseResultBody.java create mode 100644 src/main/resources/static/template/Excel.xlsx create mode 100644 src/main/resources/static/template/PowerPoint.pptx create mode 100644 src/main/resources/static/template/Word.docx diff --git a/pom.xml b/pom.xml index 15d8e66..1c18464 100644 --- a/pom.xml +++ b/pom.xml @@ -6,12 +6,12 @@ com.qiwenshare qiwenshare - 1.0.5 + 1.0.6 com.qiwenshare qiwen-file - 1.0.5-SNAPSHOT + 1.0.6-SNAPSHOT qiwen-file fileos.qiwenshare.com jar @@ -98,13 +98,6 @@ ufop-spring-boot-starter - - - junit - junit - 4.13 - test - org.springframework.boot spring-boot-starter-data-elasticsearch @@ -187,14 +180,6 @@ - - - - - - - - diff --git a/src/main/java/com/qiwenshare/file/anno/MyLog.java b/src/main/java/com/qiwenshare/file/anno/MyLog.java deleted file mode 100644 index 239e4cf..0000000 --- a/src/main/java/com/qiwenshare/file/anno/MyLog.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.qiwenshare.file.anno; - -import java.lang.annotation.*; - -/** - * 自定义注解类 - */ -@Target(ElementType.METHOD) //注解放置的目标位置,METHOD是可注解在方法级别上 -@Retention(RetentionPolicy.RUNTIME) //注解在哪个阶段执行 -@Documented //生成文档 -public @interface MyLog { - String module() default ""; - - String operation() default ""; - - String type() default "operation"; - - String level() default "0"; //0-低,1-中,2-高 -} \ No newline at end of file diff --git a/src/main/java/com/qiwenshare/file/anno/ResponseResultBody.java b/src/main/java/com/qiwenshare/file/anno/ResponseResultBody.java deleted file mode 100644 index aeb9361..0000000 --- a/src/main/java/com/qiwenshare/file/anno/ResponseResultBody.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.qiwenshare.file.anno; - -import org.springframework.web.bind.annotation.ResponseBody; - -import java.lang.annotation.*; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE, ElementType.METHOD}) -@Documented -@ResponseBody -public @interface ResponseResultBody { - -} \ No newline at end of file diff --git a/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java b/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java index 4f8de71..fc294b6 100644 --- a/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java +++ b/src/main/java/com/qiwenshare/file/aop/WebLogAcpect.java @@ -1,7 +1,7 @@ package com.qiwenshare.file.aop; +import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IOperationLogService; import com.qiwenshare.file.api.IUserService; import com.qiwenshare.file.domain.UserBean; @@ -41,12 +41,11 @@ public class WebLogAcpect { private String token = ""; private HttpServletRequest request; - private Logger logger = LoggerFactory.getLogger(WebLogAcpect.class); /** * 定义切入点,切入点为com.example.aop下的所有函数 */ - @Pointcut("@annotation(com.qiwenshare.file.anno.MyLog)") + @Pointcut("@annotation(com.qiwenshare.common.anno.MyLog)") public void webLog() { } diff --git a/src/main/java/com/qiwenshare/file/component/FileDealComp.java b/src/main/java/com/qiwenshare/file/component/FileDealComp.java index b25ddcc..6a7d2e7 100644 --- a/src/main/java/com/qiwenshare/file/component/FileDealComp.java +++ b/src/main/java/com/qiwenshare/file/component/FileDealComp.java @@ -9,7 +9,6 @@ import com.qiwenshare.file.api.*; import com.qiwenshare.file.config.es.FileSearch; import com.qiwenshare.file.domain.*; import com.qiwenshare.file.mapper.UserFileMapper; -import com.qiwenshare.file.service.UserService; import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.ufop.factory.UFOPFactory; import com.qiwenshare.ufop.operation.read.Reader; @@ -297,7 +296,7 @@ public class FileDealComp { String extractionCode, String token, long userFileId) { - log.info("权限检查开始:shareBatchNum:{}, extractionCode:{}, token:{}, userFileId{}" , shareBatchNum, extractionCode, token, userFileId); + log.debug("权限检查开始:shareBatchNum:{}, extractionCode:{}, token:{}, userFileId{}" , shareBatchNum, extractionCode, token, userFileId); UserFile userFile = userFileService.getById(userFileId); log.debug(JSON.toJSONString(userFile)); if ("undefined".equals(shareBatchNum) || StringUtils.isEmpty(shareBatchNum)) { @@ -310,7 +309,7 @@ public class FileDealComp { log.debug("文件所属用户id:" + userFile.getUserId()); log.debug("登录用户id:" + sessionUserBean.getUserId()); if (userFile.getUserId().longValue() != sessionUserBean.getUserId().longValue()) { - log.debug("用户id不一致,权限校验失败:"); + log.info("用户id不一致,权限校验失败"); return false; } } else { @@ -319,18 +318,21 @@ public class FileDealComp { List shareList = shareService.listByMap(param); //判断批次号 if (shareList.size() <= 0) { + log.info("分享批次号不存在,权限校验失败"); return false; } Integer shareType = shareList.get(0).getShareType(); if (1 == shareType) { //判断提取码 if (!shareList.get(0).getExtractionCode().equals(extractionCode)) { + log.info("提取码错误,权限校验失败"); return false; } } param.put("userFileId", userFileId); List shareFileList = shareFileService.listByMap(param); if (shareFileList.size() <= 0) { + log.info("用户id和分享批次号不匹配,权限校验失败"); return false; } diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index 473667e..e2a9c06 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -4,12 +4,12 @@ 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.exception.NotLoginException; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.operation.FileOperation; import com.qiwenshare.common.util.FileUtil; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.*; import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.config.es.FileSearch; @@ -18,6 +18,9 @@ import com.qiwenshare.file.dto.*; import com.qiwenshare.file.dto.file.*; import com.qiwenshare.file.vo.file.FileListVo; 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.operation.rename.domain.RenameFile; import com.qiwenshare.ufop.util.PathUtil; import io.swagger.v3.oas.annotations.Operation; @@ -25,10 +28,12 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; +import org.apache.commons.io.FileUtils; import org.eclipse.jetty.util.StringUtil; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder; 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.Sort; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; @@ -37,7 +42,7 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import java.io.File; +import java.io.*; import java.util.*; import java.util.concurrent.Executor; import java.util.concurrent.Executors; @@ -50,6 +55,8 @@ import static com.qiwenshare.common.util.FileUtil.getFileExtendsByType; @RequestMapping("/file") public class FileController { + @Value("${ufop.storage-type}") + private Integer storageType; @Resource IFileService fileService; @Resource @@ -296,20 +303,33 @@ public class FileController { if (sessionUserBean == null) { throw new NotLoginException(); } - String zipFileUrl = PathUtil.getStaticPath() + unzipFileDto.getFileUrl(); - File file = FileOperation.newFile(zipFileUrl); - String extendName = FileUtil.getFileExtendName(zipFileUrl); - String unzipUrl = zipFileUrl.replace("." + extendName, ""); - String[] arr = unzipFileDto.getFileUrl().split("\\."); - if (arr.length <= 1) { - return RestResult.fail().message("文件名格式错误!"); + 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 { + FileUtils.copyInputStreamToFile(inputStream, destFile); + } catch (IOException e) { + e.printStackTrace(); } + + + String extendName = userFile.getExtendName(); + + String unzipUrl = (PathUtil.getStaticPath() + "temp" + File.separator + fileBean.getFileUrl()).replace("." + extendName, ""); + List fileEntryNameList = new ArrayList<>(); - if ("zip".equals(arr[1])) { - fileEntryNameList = FileOperation.unzip(file, unzipUrl); - } else if ("rar".equals(arr[1])) { + if ("zip".equals(extendName)) { + fileEntryNameList = FileOperation.unzip(destFile, unzipUrl); + } else if ("rar".equals(extendName)) { try { - fileEntryNameList = FileOperation.unrar(file, unzipUrl); + fileEntryNameList = FileOperation.unrar(destFile, unzipUrl); } catch (Exception e) { e.printStackTrace(); log.error("rar解压失败" + e); @@ -320,9 +340,9 @@ public class FileController { } else { return RestResult.fail().message("不支持的文件格式!"); } - - List fileBeanList = new ArrayList<>(); - + if (destFile.exists()) { + destFile.delete(); + } for (int i = 0; i < fileEntryNameList.size(); i++){ String entryName = fileEntryNameList.get(i); log.info("文件名:"+ entryName); @@ -331,34 +351,61 @@ public class FileController { File currentFile = FileOperation.newFile(totalFileUrl); FileBean tempFileBean = new FileBean(); - UserFile userFile = new UserFile(); + UserFile saveUserFile = new UserFile(); - userFile.setUploadTime(DateUtil.getCurrentTime()); - userFile.setUserId(sessionUserBean.getUserId()); - userFile.setFilePath(FileUtil.pathSplitFormat(unzipFileDto.getFilePath() + entryName.replace(currentFile.getName(), "")).replace("\\", "/")); + saveUserFile.setUploadTime(DateUtil.getCurrentTime()); + saveUserFile.setUserId(sessionUserBean.getUserId()); + saveUserFile.setFilePath(FileUtil.pathSplitFormat(userFile.getFilePath() + entryName.replace(currentFile.getName(), "")).replace("\\", "/")); if (currentFile.isDirectory()){ - - userFile.setIsDir(1); - - userFile.setFileName(currentFile.getName()); - tempFileBean.setTimeStampName(currentFile.getName()); + 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(); - userFile.setIsDir(0); - userFile.setExtendName(FileUtil.getFileExtendName(totalFileUrl)); - userFile.setFileName(FileUtil.getFileNameNotExtend(currentFile.getName())); + 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.setTimeStampName(FileUtil.getFileNameNotExtend(currentFile.getName())); - tempFileBean.setFileUrl(File.separator + (currentFile.getPath()).replace(PathUtil.getStaticPath(), "")); + tempFileBean.setFileUrl(saveFileUrl); tempFileBean.setPointCount(1); - tempFileBean.setStorageType(0); - fileService.save(tempFileBean); + tempFileBean.setStorageType(storageType); + boolean saveResult = fileService.save(tempFileBean); + if (saveResult) { + boolean result = currentFile.delete(); + log.info("删除{}结果:{}",saveFileUrl, result); + } } - userFile.setFileId(tempFileBean.getFileId()); - userFile.setDeleteFlag(0); - userFileService.save(userFile); + saveUserFile.setFileId(tempFileBean.getFileId()); + saveUserFile.setDeleteFlag(0); + userFileService.save(saveUserFile); }); } diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 59d5af8..fb3730d 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -1,11 +1,11 @@ package com.qiwenshare.file.controller; +import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.FileUtil; import com.qiwenshare.common.util.MimeUtils; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IFileService; import com.qiwenshare.file.api.IFiletransferService; import com.qiwenshare.file.api.IUserFileService; @@ -15,8 +15,6 @@ import com.qiwenshare.file.domain.*; import com.qiwenshare.file.dto.DownloadFileDTO; import com.qiwenshare.file.dto.UploadFileDTO; import com.qiwenshare.file.dto.file.PreviewDTO; -import com.qiwenshare.file.service.ShareFileService; -import com.qiwenshare.file.service.ShareService; import com.qiwenshare.file.service.StorageService; import com.qiwenshare.file.vo.file.FileListVo; import com.qiwenshare.file.vo.file.UploadFileVo; diff --git a/src/main/java/com/qiwenshare/file/controller/OfficeController.java b/src/main/java/com/qiwenshare/file/controller/OfficeController.java index 1b727b2..90df681 100644 --- a/src/main/java/com/qiwenshare/file/controller/OfficeController.java +++ b/src/main/java/com/qiwenshare/file/controller/OfficeController.java @@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.DateUtil; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IFileService; import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserService; @@ -16,6 +15,8 @@ import com.qiwenshare.file.dto.file.EditOfficeFileDTO; import com.qiwenshare.file.dto.file.PreviewOfficeFileDTO; import com.qiwenshare.file.helper.ConfigManager; 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.domain.DownloadFile; import com.qiwenshare.ufop.operation.write.Writer; import com.qiwenshare.ufop.operation.write.domain.WriteFile; @@ -24,9 +25,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.digest.DigestUtils; -import org.apache.poi.xslf.usermodel.XMLSlideShow; -import org.apache.poi.xssf.usermodel.XSSFWorkbook; -import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; @@ -54,6 +52,8 @@ public class OfficeController { @Value("${deployment.host}") private String deploymentHost; + @Value("${ufop.storage-type}") + private Integer storageType; @Resource @@ -81,56 +81,27 @@ public class OfficeController { } String uuid = UUID.randomUUID().toString().replaceAll("-",""); - SimpleDateFormat formater = new SimpleDateFormat("yyyyMMdd"); - - - String fileSavePath = PathUtil.getStaticPath() + "/create/" + formater.format(new Date()); - File fileSavePathFile = new File(fileSavePath); - - if (!fileSavePathFile.exists()) { - fileSavePathFile.mkdirs(); + String templateFilePath = ""; + if ("docx".equals(extendName)) { + templateFilePath = "template/Word.docx"; + } else if ("xlsx".equals(extendName)) { + templateFilePath = "template/Excel.xlsx"; + } else if ("pptx".equals(extendName)) { + templateFilePath = "template/PowerPoint.pptx"; } - String fileUrl = "/create/" + formater.format(new Date()) + "/" + uuid + "." + extendName; + String templateFileUrl = PathUtil.getStaticPath() + templateFilePath; + FileInputStream fileInputStream = new FileInputStream(templateFileUrl); + Copier copier = ufopFactory.getCopier(); + CopyFile copyFile = new CopyFile(); + copyFile.setExtendName(extendName); + String fileUrl = copier.copy(fileInputStream, copyFile); - File file = new File(fileSavePath + "/" + uuid + "." + extendName); - if(!file.exists()){ - try { - if("docx".equals(extendName)){ - //创建word文档 - XWPFDocument document= new XWPFDocument(); - //Write the Document in file system - FileOutputStream out = new FileOutputStream(file); - document.write(out); - out.close(); - }else if("xlsx".equals(extendName)){ - //创建excel表格 - XSSFWorkbook workbook = new XSSFWorkbook(); - //创建工作表 - workbook.createSheet("Sheet1"); - //Write the Document in file system - FileOutputStream out = new FileOutputStream(file); - workbook.write(out); - out.close(); - }else if("pptx".equals(extendName)){ - //创建pptx演示文稿 - XMLSlideShow pptx = new XMLSlideShow(); - //创建工作表 - //Write the Document in file system - FileOutputStream out = new FileOutputStream(file); - pptx.write(out); - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } FileBean fileBean = new FileBean(); - fileBean.setFileSize(Long.valueOf(1024 * 3)); + fileBean.setFileSize(0L); fileBean.setFileUrl(fileUrl); - fileBean.setStorageType(0); + fileBean.setStorageType(storageType); fileBean.setPointCount(1); fileBean.setIdentifier(uuid); - fileBean.setTimeStampName(uuid); boolean saveFlag = fileService.save(fileBean); UserFile userFile = new UserFile(); if(saveFlag) { @@ -144,19 +115,6 @@ public class OfficeController { userFile.setFileId(fileBean.getFileId()); userFileService.save(userFile); } - Long newFileSize = file.length(); - //更新文件修改信息 - LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); - FileInputStream fins = new FileInputStream(fileSavePath); - String md5Str = DigestUtils.md5Hex(fins); - fins.close(); - - lambdaUpdateWrapper - .set(FileBean::getIdentifier, md5Str) - .set(FileBean::getTimeStampName, md5Str) - .set(FileBean::getFileSize, newFileSize) - .eq(FileBean::getFileId, fileBean.getFileId()); - fileService.update(lambdaUpdateWrapper); result.success(); result.setMessage("文件创建成功!"); diff --git a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java index 3f10741..a250414 100644 --- a/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java +++ b/src/main/java/com/qiwenshare/file/controller/RecoveryFileController.java @@ -3,10 +3,10 @@ package com.qiwenshare.file.controller; 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.exception.NotLoginException; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.result.RestResult; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IRecoveryFileService; import com.qiwenshare.file.api.IUserFileService; import com.qiwenshare.file.api.IUserService; diff --git a/src/main/java/com/qiwenshare/file/controller/ShareController.java b/src/main/java/com/qiwenshare/file/controller/ShareController.java index 6746e37..19d28b9 100644 --- a/src/main/java/com/qiwenshare/file/controller/ShareController.java +++ b/src/main/java/com/qiwenshare/file/controller/ShareController.java @@ -4,10 +4,10 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.RandomUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.exception.NotLoginException; import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.result.RestResult; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.*; import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.domain.Share; diff --git a/src/main/java/com/qiwenshare/file/controller/TaskController.java b/src/main/java/com/qiwenshare/file/controller/TaskController.java index c8e7e8a..5d8b9cf 100644 --- a/src/main/java/com/qiwenshare/file/controller/TaskController.java +++ b/src/main/java/com/qiwenshare/file/controller/TaskController.java @@ -69,7 +69,6 @@ public class TaskController { List userfileList = userFileService.list(); for (UserFile userFile : userfileList) { - log.info(JSON.toJSONString(userFile)); fileDealComp.uploadESByUserFileId(userFile.getUserFileId()); } diff --git a/src/main/java/com/qiwenshare/file/controller/UserController.java b/src/main/java/com/qiwenshare/file/controller/UserController.java index be610c3..c516c70 100644 --- a/src/main/java/com/qiwenshare/file/controller/UserController.java +++ b/src/main/java/com/qiwenshare/file/controller/UserController.java @@ -2,9 +2,9 @@ package com.qiwenshare.file.controller; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; +import com.qiwenshare.common.anno.MyLog; import com.qiwenshare.common.result.RestResult; import com.qiwenshare.common.util.JjwtUtil; -import com.qiwenshare.file.anno.MyLog; import com.qiwenshare.file.api.IUserService; import com.qiwenshare.file.domain.UserBean; import com.qiwenshare.file.dto.user.RegisterDTO; diff --git a/src/main/java/com/qiwenshare/file/domain/FileBean.java b/src/main/java/com/qiwenshare/file/domain/FileBean.java index fdfd9f3..fa788f0 100644 --- a/src/main/java/com/qiwenshare/file/domain/FileBean.java +++ b/src/main/java/com/qiwenshare/file/domain/FileBean.java @@ -24,9 +24,6 @@ public class FileBean { @Column(columnDefinition="bigint(20)") private Long fileId; - @Column(columnDefinition="varchar(500)") - private String timeStampName; - @Column(columnDefinition="varchar(500)") private String fileUrl; diff --git a/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java b/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java index b2e498e..7874368 100644 --- a/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java +++ b/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java @@ -7,7 +7,12 @@ import lombok.Data; @Schema(name = "解压缩文件DTO",required = true) public class UnzipFileDTO { @Schema(description = "文件url", required = true) + private long userFileId; + + @Schema(description = "文件url", required = true) + @Deprecated private String fileUrl; @Schema(description = "文件路径", required = true) + @Deprecated private String filePath; } diff --git a/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/src/main/java/com/qiwenshare/file/service/FiletransferService.java index 3c97d9d..b207914 100644 --- a/src/main/java/com/qiwenshare/file/service/FiletransferService.java +++ b/src/main/java/com/qiwenshare/file/service/FiletransferService.java @@ -91,7 +91,7 @@ public class FiletransferService implements IFiletransferService { uploadFile = uploadFileList.get(i); FileBean fileBean = new FileBean(); BeanUtil.copyProperties(uploadFileDto, fileBean); - fileBean.setTimeStampName(uploadFile.getTimeStampName()); +// fileBean.setTimeStampName(uploadFile.getTimeStampName()); if (uploadFile.getSuccess() == 1){ fileBean.setFileUrl(uploadFile.getUrl()); fileBean.setFileSize(uploadFile.getFileSize()); @@ -245,7 +245,8 @@ public class FiletransferService implements IFiletransferService { throw new UploadException("预览失败"); } PreviewFile previewFile = new PreviewFile(); - previewFile.setFileUrl(fileBean.getFileUrl()); + String fileUrl = PathUtil.getAliyunObjectNameByFileUrl(fileBean.getFileUrl()); + previewFile.setFileUrl("/" + fileUrl); previewFile.setFileSize(fileBean.getFileSize()); if ("true".equals(previewDTO.getIsMin())) { previewer.imageThumbnailPreview(httpServletResponse, previewFile); @@ -262,7 +263,7 @@ public class FiletransferService implements IFiletransferService { deleter = ufopFactory.getDeleter(fileBean.getStorageType()); DeleteFile deleteFile = new DeleteFile(); deleteFile.setFileUrl(fileBean.getFileUrl()); - deleteFile.setTimeStampName(fileBean.getTimeStampName()); +// deleteFile.setTimeStampName(fileBean.getTimeStampName()); deleter.delete(deleteFile); } diff --git a/src/main/resources/build/assembly.xml b/src/main/resources/build/assembly.xml index d3175ec..0fd922a 100644 --- a/src/main/resources/build/assembly.xml +++ b/src/main/resources/build/assembly.xml @@ -17,6 +17,14 @@ src/main/resources conf 0644 + + static/** + + + + src/main/resources/static + static + 0644 diff --git a/src/main/resources/config/application.properties b/src/main/resources/config/application.properties index 0c7040d..44ef35b 100644 --- a/src/main/resources/config/application.properties +++ b/src/main/resources/config/application.properties @@ -63,13 +63,22 @@ ufop.aliyun.oss.access-key-secret= ufop.aliyun.oss.bucket-name= #FastDFS配置 -fdfs.so-timeout=1501 -fdfs.connect-timeout=601 +#读取时间 +fdfs.so-timeout=15000 +#超时连接时间 +fdfs.connect-timeout=15000 +# 连接池最大数量 +fdfs.pool.max-total=200 +#单个tracker最大连接数 +fdfs.pool.max-total-per-key=50 +#连接耗尽最大等待时间 毫秒 +fdfs.pool.max-wait-millis=5000 fdfs.tracker-list=127.0.0.1:22122 + # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 diff --git a/src/main/resources/database/data.sql b/src/main/resources/database/data.sql index 83eec1e..777714a 100644 --- a/src/main/resources/database/data.sql +++ b/src/main/resources/database/data.sql @@ -1,12 +1,4 @@ --- 初始化用户 -insert ignore into user (userId, username, salt, password) values (1, 'admin', 'admin', 'df655ad8d3229f3269fad2a8bab59b6c'); insert ignore into role (roleId, role, description) values (1, 'admin', '管理员'),(2, 'user', '普通用户'); insert ignore into permission (permissionId, permission) values (1, 'admin'),(2, 'user'); -delete from user_role where userId = 1 and roleId = 1; -insert into user_role (userId, roleId) values (1, 1); -delete from role_permission where roleId = 1 and permissionId = 1; -insert into role_permission (roleId, permissionId) values (1, 1); - -delete from sysparam where sysParamId = 1; -insert into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) values (1, 'totalStorageSize', '1024', '总存储大小(单位M)'); \ No newline at end of file +insert ignore into sysparam (sysParamId, sysParamKey, sysParamValue, sysParamDesc) values (1, 'totalStorageSize', '1024', '总存储大小(单位M)'); \ No newline at end of file diff --git a/src/main/resources/static/template/Excel.xlsx b/src/main/resources/static/template/Excel.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..c3e215fba67771098eb03a5d3d658dfcfbfe3a52 GIT binary patch literal 6611 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 J(8?A7@L#8o@b&-z literal 0 HcmV?d00001 diff --git a/src/main/resources/static/template/PowerPoint.pptx b/src/main/resources/static/template/PowerPoint.pptx new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/static/template/Word.docx b/src/main/resources/static/template/Word.docx new file mode 100644 index 0000000..e69de29 diff --git a/src/test/java/com/qiwenshare/file/ScpApplicationTests.java b/src/test/java/com/qiwenshare/file/ScpApplicationTests.java index 646d3d9..354170c 100644 --- a/src/test/java/com/qiwenshare/file/ScpApplicationTests.java +++ b/src/test/java/com/qiwenshare/file/ScpApplicationTests.java @@ -1,13 +1,10 @@ package com.qiwenshare.file; -//import org.junit.Test; -//import org.junit.runner.RunWith; + import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; -@RunWith(SpringRunner.class) @SpringBootTest public class ScpApplicationTests { From e2d01476cfd5bcd63d94cc3d24a7cf786530c41b Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Sat, 7 May 2022 15:56:59 +0000 Subject: [PATCH 3/3] =?UTF-8?q?!122=20fix(=E6=96=87=E4=BB=B6=E5=A4=8D?= =?UTF-8?q?=E5=88=B6):=20=E6=96=87=E4=BB=B6=E5=A4=8D=E5=88=B6=E6=88=96?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=90=8E=E7=9B=AE=E5=BD=95=E5=8E=BB=E9=87=8D?= =?UTF-8?q?=20fix(=E6=96=87=E4=BB=B6=E5=A4=8D=E5=88=B6):=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E5=88=B6=E6=88=96=E7=A7=BB=E5=8A=A8=E5=90=8E?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E5=8E=BB=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../file/controller/FileController.java | 6 +- .../file/service/UserFileService.java | 79 ++++++++++++++----- 2 files changed, 61 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/controller/FileController.java b/src/main/java/com/qiwenshare/file/controller/FileController.java index 12248bf..8556a3d 100644 --- a/src/main/java/com/qiwenshare/file/controller/FileController.java +++ b/src/main/java/com/qiwenshare/file/controller/FileController.java @@ -182,9 +182,6 @@ public class FileController { return RestResult.success(); } - - - @Operation(summary = "获取文件列表", description = "用来做前台列表展示", tags = {"file"}) @RequestMapping(value = "/getfilelist", method = RequestMethod.GET) @ResponseBody @@ -276,6 +273,7 @@ public class FileController { } userFileService.userFileCopy(oldfilePath, newfilePath, fileName, extendName, sessionUserBean.getUserId()); + fileDealComp.deleteRepeatSubDirFile(newfilePath, sessionUserBean.getUserId()); return RestResult.success(); } @@ -300,6 +298,8 @@ public class FileController { } userFileService.updateFilepathByFilepath(oldfilePath, newfilePath, fileName, extendName, sessionUserBean.getUserId()); + + fileDealComp.deleteRepeatSubDirFile(newfilePath, sessionUserBean.getUserId()); return RestResult.success(); } diff --git a/src/main/java/com/qiwenshare/file/service/UserFileService.java b/src/main/java/com/qiwenshare/file/service/UserFileService.java index fc367b3..a86862c 100644 --- a/src/main/java/com/qiwenshare/file/service/UserFileService.java +++ b/src/main/java/com/qiwenshare/file/service/UserFileService.java @@ -1,8 +1,10 @@ package com.qiwenshare.file.service; import cn.hutool.core.net.URLDecoder; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -13,6 +15,7 @@ import com.qiwenshare.common.util.DateUtil; import com.qiwenshare.common.util.security.JwtUser; import com.qiwenshare.common.util.security.SessionUtil; import com.qiwenshare.file.api.IUserFileService; +import com.qiwenshare.file.component.FileDealComp; import com.qiwenshare.file.domain.RecoveryFile; import com.qiwenshare.file.domain.UserFile; import com.qiwenshare.file.io.QiwenFile; @@ -28,6 +31,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; +import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.Executor; @@ -46,6 +50,8 @@ public class UserFileService extends ServiceImpl impl RecoveryFileMapper recoveryFileMapper; @Resource FileTypeMapper fileTypeMapper; + @Resource + FileDealComp fileDealComp; public static Executor executor = Executors.newFixedThreadPool(20); @@ -90,15 +96,25 @@ public class UserFileService extends ServiceImpl impl @Override public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) { - List userFileList = selectUserFileListByPath(newfilePath, userId); - List userFileNameList = userFileList.stream().filter(o -> o.getFileName().equals(fileName) && o.getExtendName().equals(extendName)).collect(Collectors.toList()); - if (userFileNameList != null && userFileNameList.size() > 0) { - throw new QiwenException(200000, "目的路径同名文件已存在,不能移动"); + QueryWrapper queryWrapper = new QueryWrapper() + .eq("userId", userId) + .eq("filePath", oldfilePath).eq("fileName", fileName); + if (extendName == null) { + queryWrapper.eq("isDir", 1); + } else { + queryWrapper.eq("extendName", extendName); + } + queryWrapper.eq("deleteFlag", 0); + List userFileList = userFileMapper.selectList(queryWrapper); + for (UserFile userFile : userFileList) { + userFile.setFilePath(newfilePath); + if (userFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(repeatFileName); + } + userFileMapper.updateById(userFile); } - - //移动根目录 - userFileMapper.updateFilepathByPathAndName(oldfilePath, newfilePath, fileName, extendName, userId); //移动子目录 oldfilePath = new QiwenFile(oldfilePath, fileName, true).getPath(); @@ -109,6 +125,10 @@ public class UserFileService extends ServiceImpl impl for (UserFile newUserFile : list) { newUserFile.setFilePath(newUserFile.getFilePath().replaceFirst(oldfilePath, newfilePath)); + if (newUserFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(newUserFile, newUserFile.getFilePath()); + newUserFile.setFileName(repeatFileName); + } userFileMapper.updateById(newUserFile); } } @@ -118,27 +138,44 @@ public class UserFileService extends ServiceImpl impl @Override public void userFileCopy(String oldfilePath, String newfilePath, String fileName, String extendName, long userId) { - - - if ("null".equals(extendName)){ - extendName = null; + QueryWrapper queryWrapper = new QueryWrapper() + .eq("userId", userId) + .eq("filePath", oldfilePath).eq("fileName", fileName); + if (extendName == null) { + queryWrapper.eq("isDir", 1); + } else { + queryWrapper.eq("extendName", extendName); + } + queryWrapper.eq("deleteFlag", 0); + List userFileList = userFileMapper.selectList(queryWrapper); + for (UserFile userFile : userFileList) { + userFile.setFilePath(newfilePath); + userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); + if (userFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(repeatFileName); + } + userFileMapper.insert(userFile); } - userFileMapper.batchInsertByPathAndName(oldfilePath, newfilePath, fileName, extendName, userId); - - - //移动子目录 oldfilePath = new QiwenFile(oldfilePath, fileName, true).getPath(); newfilePath = new QiwenFile(newfilePath, fileName, true).getPath(); - oldfilePath = oldfilePath.replace("\\", "\\\\\\\\"); - oldfilePath = oldfilePath.replace("'", "\\'"); - oldfilePath = oldfilePath.replace("%", "\\%"); - oldfilePath = oldfilePath.replace("_", "\\_"); if (extendName == null) { //为null说明是目录,则需要移动子目录 - userFileMapper.batchInsertByFilepath(oldfilePath, newfilePath, userId); - + QueryWrapper subQueryWrapper = new QueryWrapper(); + subQueryWrapper.likeRight("filePath", oldfilePath); + subQueryWrapper.eq("userId", userId); + List subUserFileList = userFileMapper.selectList(subQueryWrapper); + for (UserFile userFile : subUserFileList) { + userFile.setFilePath(userFile.getFilePath().replaceFirst(oldfilePath, newfilePath)); + userFile.setUserFileId(IdUtil.getSnowflakeNextIdStr()); + if (userFile.getIsDir() == 0) { + String repeatFileName = fileDealComp.getRepeatFileName(userFile, userFile.getFilePath()); + userFile.setFileName(repeatFileName); + } + userFileMapper.insert(userFile); + } } }