From e8e5909abffde90b1af4b6bed87b4fd2975b796c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com>
Date: Sun, 14 Mar 2021 22:50:51 +0800
Subject: [PATCH 01/14] =?UTF-8?q?FastFDS=E9=9B=86=E6=88=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
file-common/pom.xml | 17 +-
.../common/operation/FileOperation.java | 6 +-
.../qiwenshare/common/upload/Uploader.java | 23 +-
.../factory/FastDFSUploaderFactory.java | 17 +
.../upload/product/AliyunOSSUploader.java | 6 +-
.../common/upload/product/ChunkUploader.java | 3 +-
.../upload/product/FastDFSUploader.java | 240 +++++++++++
.../common/upload/product/NormalUploader.java | 2 +-
.../com/qiwenshare/common/util/FileUtil.java | 5 +-
.../qiwenshare/common/util/JedisConfig.java | 403 ++++++++++++++++++
.../qiwenshare/file/config/FdfsConfig.java | 14 +
.../file/config/QiwenFileConfig.java | 2 +
.../file/controller/FileController.java | 2 +-
.../controller/FiletransferController.java | 2 +-
.../qiwenshare/file/service/FileService.java | 2 +-
.../file/service/FiletransferService.java | 4 +
.../resources/config/application.properties | 9 +
17 files changed, 734 insertions(+), 23 deletions(-)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
create mode 100644 file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java
diff --git a/file-common/pom.xml b/file-common/pom.xml
index e1de449..434f716 100644
--- a/file-common/pom.xml
+++ b/file-common/pom.xml
@@ -49,10 +49,21 @@
+
+
+
+
+
+
- net.oschina.zcx7878
- fastdfs-client-java
- 1.27.0.0
+ com.github.tobato
+ fastdfs-client
+ 1.26.2
+
+
+ redis.clients
+ jedis
+ 3.0.1
diff --git a/file-common/src/main/java/com/qiwenshare/common/operation/FileOperation.java b/file-common/src/main/java/com/qiwenshare/common/operation/FileOperation.java
index dfa4216..43ca028 100644
--- a/file-common/src/main/java/com/qiwenshare/common/operation/FileOperation.java
+++ b/file-common/src/main/java/com/qiwenshare/common/operation/FileOperation.java
@@ -278,9 +278,9 @@ public class FileOperation {
}
}
for (String zipPath : fileEntryNameList) {
- if (FileUtil.isImageFile(FileUtil.getFileType(zipPath))) {
+ if (FileUtil.isImageFile(FileUtil.getFileExtendName(zipPath))) {
File file = new File(destDirPath + zipPath);
- File minFile = new File(destDirPath + FileUtil.getFileNameNotExtend(zipPath) + "_min." + FileUtil.getFileType(zipPath));
+ File minFile = new File(destDirPath + FileUtil.getFileNameNotExtend(zipPath) + "_min." + FileUtil.getFileExtendName(zipPath));
try {
ImageOperation.thumbnailsImage(file, minFile, 300);
} catch (IOException e) {
@@ -361,7 +361,7 @@ public class FileOperation {
public static long deleteFileFromDisk(String fileurl) {
String fileUrl = PathUtil.getStaticPath() + fileurl;
- String extendName = FileUtil.getFileType(fileUrl);
+ String extendName = FileUtil.getFileExtendName(fileUrl);
String minFileUrl = fileUrl.replace("." + extendName, "_min." + extendName);
long filesize = getFileSize(fileUrl);
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
index 07618bb..8b01901 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
@@ -4,8 +4,6 @@ import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.util.PathUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
@@ -29,7 +27,26 @@ public abstract class Uploader {
protected StandardMultipartHttpServletRequest request = null;
public abstract List upload(HttpServletRequest request);
-
+//
+//
+// protected static TrackerServer trackerServer = null;
+//
+// protected static StorageServer storageServer = null;
+//
+// static {
+// try {
+// //String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
+// Properties properties = new Properties();
+// properties.setProperty("tracker_server ", "121.89.222.103");
+// properties.setProperty("http.tracker_http_port", "8090");
+// ClientGlobal.initByProperties(properties);
+// TrackerClient trackerClient = new TrackerClient();
+// trackerServer = trackerClient.getConnection();
+// storageServer = trackerClient.getStoreStorage(trackerServer);
+// } catch (Exception e) {
+// log.error("FastDFS Client Init Fail!",e);
+// }
+// }
/**
* 根据字符串创建本地目录 并按照日期建立子目录返回
*
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
new file mode 100644
index 0000000..975d3cd
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
@@ -0,0 +1,17 @@
+package com.qiwenshare.common.upload.factory;
+
+import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.upload.Uploader;
+import com.qiwenshare.common.upload.product.FastDFSUploader;
+
+public class FastDFSUploaderFactory implements UploaderFactory {
+ @Override
+ public Uploader getUploader() {
+ return new FastDFSUploader();
+ }
+
+ @Override
+ public Uploader getUploader(UploadFile uploadFile) {
+ return new FastDFSUploader(uploadFile);
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
index 5dcac39..9414f6d 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
@@ -12,7 +12,6 @@ import com.qiwenshare.common.util.PathUtil;
import lombok.Data;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -23,10 +22,7 @@ import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
-import java.io.RandomAccessFile;
import java.util.*;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
public class AliyunOSSUploader extends Uploader {
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
@@ -111,7 +107,7 @@ public class AliyunOSSUploader extends Uploader {
String fileName = getFileName(originalName);
- String fileType = FileUtil.getFileType(originalName);
+ String fileType = FileUtil.getFileExtendName(originalName);
uploadFile.setFileName(fileName);
uploadFile.setFileType(fileType);
uploadFile.setTimeStampName(timeStampName);
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
index 13bb6e8..36efb75 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
@@ -9,7 +9,6 @@ import com.qiwenshare.common.util.PathUtil;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -93,7 +92,7 @@ public class ChunkUploader extends Uploader {
String originalName = multipartfile.getOriginalFilename();
String fileName = getFileName(originalName);
- String fileType = FileUtil.getFileType(originalName);
+ String fileType = FileUtil.getFileExtendName(originalName);
uploadFile.setFileName(fileName);
uploadFile.setFileType(fileType);
uploadFile.setTimeStampName(timeStampName);
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
new file mode 100644
index 0000000..af5c5cd
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
@@ -0,0 +1,240 @@
+package com.qiwenshare.common.upload.product;
+
+import com.github.tobato.fastdfs.domain.StorePath;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
+import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.upload.Uploader;
+import com.qiwenshare.common.util.FileUtil;
+import com.qiwenshare.common.util.PathUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+
+@Slf4j
+@Component
+public class FastDFSUploader extends Uploader {
+ @Resource
+ AppendFileStorageClient defaultAppendFileStorageClient;
+
+ UploadFile uploadFile;
+
+ private static Map CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
+ private static Map UPLOADED_SIZE = new HashMap<>();
+ private static Map STORE_PATH = new HashMap<>();
+ private static Map LOCK_MAP = new HashMap<>();
+
+ public FastDFSUploader() {
+
+ }
+
+ public FastDFSUploader(UploadFile uploadFile) {
+ this.uploadFile = uploadFile;
+ }
+
+
+ @Override
+ public List upload(HttpServletRequest request) {
+ log.info("开始上传upload");
+
+ List saveUploadFileList = new ArrayList<>();
+ this.request = (StandardMultipartHttpServletRequest) request;
+
+ boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
+ if (!isMultipart) {
+ UploadFile uploadFile = new UploadFile();
+ uploadFile.setSuccess(0);
+ uploadFile.setMessage("未包含文件上传域");
+ saveUploadFileList.add(uploadFile);
+ return saveUploadFileList;
+ }
+ DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
+ String savePath = getSaveFilePath();
+ dff.setRepository(new File(savePath));
+
+ try {
+ ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
+ sfu.setSizeMax(this.maxSize * 1024L);
+ sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
+ Iterator iter = this.request.getFileNames();
+ while (iter.hasNext()) {
+
+ saveUploadFileList = doUpload(savePath, iter);
+ }
+ } catch (IOException e) {
+ UploadFile uploadFile = new UploadFile();
+ uploadFile.setSuccess(1);
+ uploadFile.setMessage("未知错误");
+ saveUploadFileList.add(uploadFile);
+ e.printStackTrace();
+ }
+
+ log.info("结束上传");
+ return saveUploadFileList;
+ }
+
+
+
+ private List doUpload(String savePath, Iterator iter) throws IOException{
+
+ List saveUploadFileList = new ArrayList<>();
+
+ try {
+ MultipartFile multipartfile = this.request.getFile(iter.next());
+ boolean uploadResult = uploadFileChunk(multipartfile);
+ if (!uploadResult) {
+
+ }
+ String timeStampName = getTimeStampName();
+ String originalName = multipartfile.getOriginalFilename();
+
+ String fileName = getFileName(originalName);
+
+ String fileType = FileUtil.getFileExtendName(originalName);
+ uploadFile.setFileName(fileName);
+ uploadFile.setFileType(fileType);
+ uploadFile.setTimeStampName(timeStampName);
+
+
+ String confFilePath = savePath + FILE_SEPARATOR + uploadFile.getIdentifier() + "." + "conf";
+ File confFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + confFilePath);
+
+
+
+ boolean isComplete = checkUploadStatus(uploadFile, confFile);
+ if (isComplete) {
+ log.info("分片上传完成");
+
+ uploadFile.setUrl(STORE_PATH.get(uploadFile.getIdentifier()));
+ uploadFile.setSuccess(1);
+ uploadFile.setMessage("上传成功");
+ } else {
+ uploadFile.setSuccess(0);
+ uploadFile.setMessage("未完成");
+ }
+
+ } catch (Exception e) {
+ log.error("上传出错:" + e);
+ }
+
+ uploadFile.setIsOSS(1);
+
+ uploadFile.setFileSize(uploadFile.getTotalSize());
+ saveUploadFileList.add(uploadFile);
+ return saveUploadFileList;
+ }
+
+ public boolean uploadFileChunk(MultipartFile multipartFile) {
+
+ // 存储在fastdfs不带组的路径
+// String noGroupPath = "";
+ log.info("当前文件的Md5:{}", uploadFile.getIdentifier());
+
+ // 真正的拥有者
+ boolean currOwner = false;
+
+ try {
+
+ Boolean lock = LOCK_MAP.get(uploadFile.getIdentifier());
+//
+// if (lock == null){
+// log.info("请求块锁失败");
+// return false;
+// }
+ if (lock != null && lock) {
+ return false;
+ }
+ LOCK_MAP.put(uploadFile.getIdentifier(), true);
+ // 写入锁的当前拥有者
+ currOwner = true;
+
+ // redis中记录当前应该传第几块(从0开始)
+ Integer currentChunkInRedis = CURRENT_UPLOAD_CHUNK_NUMBER.get(uploadFile.getIdentifier());
+
+ log.info("当前块的大小:{}", uploadFile.getCurrentChunkSize());
+ if (currentChunkInRedis == null) {
+ currentChunkInRedis = 1;
+ }
+
+ //此段代码保证顺序,如果满足条件则返回失败
+ if (uploadFile.getChunkNumber() < currentChunkInRedis) {
+ log.info("当前文件块已上传");
+ return false;
+ } else if (uploadFile.getChunkNumber() > currentChunkInRedis) {
+ log.info("当前文件块需要等待上传,稍后请重试");
+ return false;
+ }
+
+ log.info("***********开始上传第{}块**********", uploadFile.getChunkNumber());
+ StorePath storePath = null;
+
+ try {
+
+ if (uploadFile.getChunkNumber() <= 1) {
+ log.info("上传第一块");
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber() + 1);
+ try {
+ storePath = defaultAppendFileStorageClient.uploadAppenderFile("default_group", multipartFile.getInputStream(),
+ multipartFile.getSize(), FileUtil.getFileExtendName(multipartFile.getOriginalFilename()));
+ // 记录第一个分片上传的大小
+ UPLOADED_SIZE.put(uploadFile.getIdentifier(), uploadFile.getCurrentChunkSize());
+ log.info("第一块上传完成");
+ if (storePath == null) {
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
+ log.info("获取远程文件路径出错");
+ return false;
+ }
+ } catch (Exception e) {
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
+ log.error("初次上传远程文件出错", e);
+ return false;
+ }
+
+ STORE_PATH.put(uploadFile.getIdentifier(), storePath.getPath());
+ log.info("上传文件 result = {}", storePath.getPath());
+ } else {
+ log.info("上传第{}块:" + uploadFile.getChunkNumber());
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber() + 1);
+ String path = STORE_PATH.get(uploadFile.getIdentifier());
+ if (path == null) {
+ log.error("无法获取已上传服务器文件地址");
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
+ return false;
+ }
+ try {
+ Long alreadySize = UPLOADED_SIZE.get(uploadFile.getIdentifier());
+ // 追加方式实际实用如果中途出错多次,可能会出现重复追加情况,这里改成修改模式,即时多次传来重复文件块,依然可以保证文件拼接正确
+ defaultAppendFileStorageClient.modifyFile("default_group", path, multipartFile.getInputStream(),
+ multipartFile.getSize(), alreadySize);
+ // 记录分片上传的大小
+ UPLOADED_SIZE.put(uploadFile.getIdentifier(), alreadySize + multipartFile.getSize());
+ log.info("第{}块更新完成", uploadFile.getChunkNumber());
+ } catch (Exception e) {
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
+ log.error("更新远程文件出错", e);
+ return false;
+ }
+ }
+ } catch (Exception e) {
+ log.error("上传文件错误", e);
+ return false;
+ }
+ } finally {
+ // 锁的当前拥有者才能释放块上传锁
+ if (currOwner) {
+ LOCK_MAP.put(uploadFile.getIdentifier(), false);
+ //JedisConfig.setString(chunkLockName, "0");
+ }
+ }
+ log.info("***********第{}块上传成功**********", uploadFile.getChunkNumber());
+ return true;
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
index 7bb4c35..b882b0e 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
@@ -71,7 +71,7 @@ public class NormalUploader extends Uploader {
String fileName = getFileName(originalName);
- String fileType = FileUtil.getFileType(originalName);
+ String fileType = FileUtil.getFileExtendName(originalName);
uploadFile.setFileName(fileName);
uploadFile.setFileType(fileType);
uploadFile.setTimeStampName(timeStampName);
diff --git a/file-common/src/main/java/com/qiwenshare/common/util/FileUtil.java b/file-common/src/main/java/com/qiwenshare/common/util/FileUtil.java
index 7e26492..47f5340 100644
--- a/file-common/src/main/java/com/qiwenshare/common/util/FileUtil.java
+++ b/file-common/src/main/java/com/qiwenshare/common/util/FileUtil.java
@@ -1,6 +1,5 @@
package com.qiwenshare.common.util;
-import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -74,7 +73,7 @@ public class FileUtil {
* @param fileName 文件名
* @return 文件扩展名
*/
- public static String getFileType(String fileName) {
+ public static String getFileExtendName(String fileName) {
if (fileName.lastIndexOf(".") == -1) {
return "";
//这里暂时用jpg,后续应该去获取真实的文件类型
@@ -89,7 +88,7 @@ public class FileUtil {
* @return 文件名(不带扩展名)
*/
public static String getFileNameNotExtend(String fileName) {
- String fileType = getFileType(fileName);
+ String fileType = getFileExtendName(fileName);
return fileName.replace("." + fileType, "");
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java b/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
new file mode 100644
index 0000000..1e8b64b
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
@@ -0,0 +1,403 @@
+//package com.qiwenshare.common.util;
+//
+//import cn.hutool.core.util.StrUtil;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import redis.clients.jedis.Jedis;
+//import redis.clients.jedis.JedisPool;
+//import redis.clients.jedis.JedisPoolConfig;
+//
+//import java.util.List;
+//
+///**
+// * @Description: JedisConfig
+// * @ClassName: JedisConfig
+// * @Author: xxx
+// * @Date: 2019/12/31 16:23
+// * @Version: 1.0
+// */
+//public class JedisConfig {
+//
+// private static Logger logger = LoggerFactory.getLogger(JedisConfig.class);
+//
+// protected static final ThreadLocal threadLocalJedis = new ThreadLocal<>();
+// private static JedisPool jedisPool;
+// /**
+// * Redis服务器IP
+// */
+// private static String ADDR_ARRAY = "192.168.1.122";
+//
+// /**
+// * Redis的端口号
+// */
+// private static int PORT = 6379;
+//
+// /**
+// * 访问密码
+// */
+// private static String AUTH = "123456";
+//
+// /**
+// * 可用连接实例的最大数目,默认值为8
+// * 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
+// */
+// private static int MAX_ACTIVE = -1;
+//
+// /**
+// * 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
+// */
+// private static int MAX_IDLE = 16;
+//
+// /**
+// * 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
+// */
+// private static int MAX_WAIT = 1000 * 5;
+//
+// // 超时时间
+// private static int TIMEOUT = 1000 * 5;
+//
+// /**
+// * 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
+// */
+// private static boolean TEST_ON_BORROW = true;
+//
+// /**
+// * redis过期时间,以秒为单位
+// */
+// /**
+// * 一小时
+// */
+// public final static int EXRP_HOUR = 60 * 60;
+// /**
+// * 一天
+// */
+// public final static int EXRP_DAY = 60 * 60 * 24;
+// /**
+// * 一个月
+// */
+// public final static int EXRP_MONTH = 60 * 60 * 24 * 30;
+//
+// public JedisConfig() {
+// }
+//
+// static {
+// initialPool();
+// }
+//
+// /**
+// * 初始化Redis连接池,注意一定要在使用前初始化一次,一般在项目启动时初始化就行了
+// */
+// public static JedisPool initialPool() {
+// JedisPool jp = null;
+// try {
+// JedisPoolConfig config = new JedisPoolConfig();
+// config.setMaxTotal(MAX_ACTIVE);
+// config.setMaxIdle(MAX_IDLE);
+// config.setMaxWaitMillis(MAX_WAIT);
+// config.setTestOnBorrow(TEST_ON_BORROW);
+// config.setTestOnCreate(true);
+// config.setTestWhileIdle(true);
+// config.setTestOnReturn(true);
+// config.setNumTestsPerEvictionRun(-1);
+// jp = new JedisPool(config, ADDR_ARRAY, PORT, TIMEOUT, AUTH);
+// jedisPool = jp;
+// threadLocalJedis.set(getJedis());
+// } catch (Exception e) {
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// }
+// return jp;
+// }
+//
+// /**
+// * 获取Jedis实例,一定先初始化
+// * @return Jedis
+// */
+// public static Jedis getJedis() {
+// boolean success = false;
+// Jedis jedis = null;
+// int i=0;
+// while (!success) {
+// i++;
+// try {
+// if (jedisPool != null) {
+// jedis = threadLocalJedis.get();
+// if (jedis == null){
+// jedis = jedisPool.getResource();
+// }else {
+// if(!jedis.isConnected() && !jedis.getClient().isBroken()){
+// threadLocalJedis.set(null);
+// jedis = jedisPool.getResource();
+// }
+// return jedis;
+// }
+// }else {
+// throw new RuntimeException("redis连接池初始化失败");
+// }
+// } catch (Exception e) {
+// System.out.println(Thread.currentThread().getName()+":第"+i+"次获取失败!!!");
+// success = false;
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// }
+// if (jedis != null){
+// success = true;
+// }
+// if (i >= 10 && i < 20){
+// try {
+// Thread.sleep(1000);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// }
+// if (i >= 20 && i < 30){
+// try {
+// Thread.sleep(2000);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+//
+// }
+// if (i >= 30 && i < 40){
+// try {
+// Thread.sleep(3000);
+// } catch (InterruptedException e) {
+// e.printStackTrace();
+// }
+// }
+// if (i >= 40){
+// System.out.println("redis彻底连不上了~~~~(>_<)~~~~");
+// return null;
+// }
+// }
+// if (threadLocalJedis.get() == null) {
+// threadLocalJedis.set(jedis);
+// }
+// return jedis;
+// }
+//
+// /**
+// * 设置 String
+// * @param key
+// * @param value
+// */
+// public static void setString(String key, String value) {
+// Jedis jo = null;
+// try {
+// value = StrUtil.isBlank(value) ? "" : value;
+// jo = getJedis();
+// jo.set(key, value);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis服务器异常");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// /**
+// * 设置 过期时间
+// * @param key
+// * @param seconds 以秒为单位
+// * @param value
+// */
+// public static void setString(String key, int seconds, String value) {
+// Jedis jo = null;
+// try {
+// value = StrUtil.isBlank(value) ? "" : value;
+// jo = getJedis();
+// jo.setex(key, seconds, value);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis服务器异常");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+//
+//
+// }
+//
+// /**
+// * 获取String值
+// * @param key
+// * @return value
+// */
+// public static String getString(String key) {
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// if (jo == null || !jo.exists(key)) {
+// return null;
+// }
+// return jo.get(key);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// public static long incrBy(String key, long integer) {
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.incrBy(key, integer);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// public static long decrBy(String key, long integer) {
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.decrBy(key, integer);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// /**
+// * 删除多个key
+// */
+// public static long delKeys(String [] keys){
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.del(keys);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+//
+// }
+//
+// /**
+// * 删除单个key
+// */
+// public static long delKey(String key){
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.del(key);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+//
+// }
+//
+// /**
+// * 添加到队列尾
+// */
+// public static long rpush(String key,String node){
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.rpush(key,node);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// /**
+// * 删除list元素
+// */
+// public static long delListNode(String key,int count,String value){
+// Jedis jo = null;
+// try {
+// jo = getJedis();
+// return jo.lrem(key,count,value);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// }
+//
+// /**
+// * 获取所有list
+// */
+// public static List getListAll(String key){
+// Jedis jo = null;
+// List list=null;
+// try {
+// jo = getJedis();
+// list= jo.lrange(key,0,-1);
+// } catch (Exception e) {
+// threadLocalJedis.set(null);
+// e.printStackTrace();
+// logger.error("redis服务器异常",e);
+// throw new RuntimeException("redis操作错误");
+// } finally {
+// if (jo != null) {
+// close(jo);
+// }
+// }
+// return list;
+// }
+//
+// /**
+// * 清理缓存redis
+// */
+// public void cleanLoacl(Jedis jo){
+// threadLocalJedis.set(null);
+// close(jo);
+// }
+//
+// public static void close(Jedis jedis) {
+// if (threadLocalJedis.get() == null && jedis != null){
+// jedis.close();
+// }
+// }
+//}
\ No newline at end of file
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java b/file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java
new file mode 100644
index 0000000..754eb5f
--- /dev/null
+++ b/file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java
@@ -0,0 +1,14 @@
+package com.qiwenshare.file.config;
+
+import com.github.tobato.fastdfs.FdfsClientConfig;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableMBeanExport;
+import org.springframework.context.annotation.Import;
+import org.springframework.jmx.support.RegistrationPolicy;
+
+@Configuration
+@Import(FdfsClientConfig.class)
+@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
+public class FdfsConfig {
+
+}
\ No newline at end of file
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java b/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java
index 7b83d7e..f135471 100644
--- a/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java
+++ b/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java
@@ -12,6 +12,8 @@ public class QiwenFileConfig {
private boolean shareMode;
+ private String storageType;
+
private AliyunConfig aliyun = new AliyunConfig();
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
index 756400b..f362f7f 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
@@ -309,7 +309,7 @@ public class FileController {
}else{
userFile.setIsDir(0);
- userFile.setExtendName(FileUtil.getFileType(totalFileUrl));
+ userFile.setExtendName(FileUtil.getFileExtendName(totalFileUrl));
userFile.setFileName(FileUtil.getFileNameNotExtend(currentFile.getName()));
tempFileBean.setFileSize(currentFile.length());
tempFileBean.setTimeStampName(FileUtil.getFileNameNotExtend(currentFile.getName()));
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index a0eb53b..ff229b3 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -76,7 +76,7 @@ public class FiletransferController {
userFile.setFilePath(uploadFileDto.getFilePath());
String fileName = uploadFileDto.getFilename();
userFile.setFileName(fileName.substring(0, fileName.lastIndexOf(".")));
- userFile.setExtendName(FileUtil.getFileType(fileName));
+ userFile.setExtendName(FileUtil.getFileExtendName(fileName));
userFile.setDeleteFlag(0);
userFile.setIsDir(0);
userFile.setUploadTime(DateUtil.getCurrentTime());
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
index 8e2d39e..1da0e6a 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
@@ -87,7 +87,7 @@ public class FileService extends ServiceImpl implements IF
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
} else {
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
- if (FileUtil.isImageFile(FileUtil.getFileType(fileBean.getFileUrl()))) {
+ if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
}
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
index bee5fef..ee5caa1 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
@@ -13,6 +13,7 @@ import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.factory.AliyunOSSUploaderFactory;
import com.qiwenshare.common.upload.factory.ChunkUploaderFactory;
import com.qiwenshare.common.upload.Uploader;
+import com.qiwenshare.common.upload.factory.FastDFSUploaderFactory;
import com.qiwenshare.file.api.IFiletransferService;
import com.qiwenshare.common.domain.AliyunOSS;
@@ -45,6 +46,7 @@ public class FiletransferService implements IFiletransferService {
@Override
public void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId) {
AliyunOSS oss = qiwenFileConfig.getAliyun().getOss();
+ String storyType = qiwenFileConfig.getStorageType();
request.setAttribute("oss", oss);
Uploader uploader;
UploadFile uploadFile = new UploadFile();
@@ -56,6 +58,8 @@ public class FiletransferService implements IFiletransferService {
uploadFile.setCurrentChunkSize(UploadFileDto.getCurrentChunkSize());
if (oss.isEnabled()) {
uploader = new AliyunOSSUploaderFactory().getUploader(uploadFile);
+ } else if ("FastFDS".equals(storyType)) {
+ uploader = new FastDFSUploaderFactory().getUploader(uploadFile);
} else {
uploader = new ChunkUploaderFactory().getUploader(uploadFile);
}
diff --git a/file-web/src/main/resources/config/application.properties b/file-web/src/main/resources/config/application.properties
index 8ad56c1..b798ae6 100644
--- a/file-web/src/main/resources/config/application.properties
+++ b/file-web/src/main/resources/config/application.properties
@@ -51,6 +51,8 @@ mybatis-plus.global-config.banner=false
qiwen-file.remote-login=false
qiwen-file.share-mode=false
+#FastFDS
+qiwen-file.storage-type=FastFDS
#是否启用阿里云oss
qiwen-file.aliyun.oss.enabled=false
@@ -62,3 +64,10 @@ qiwen-file.aliyun.oss.bucket-name=
#阿里云oss绑定域名
qiwen-file.aliyun.oss.domain=
+
+fdfs.so-timeout=1501
+fdfs.connect-timeout=601
+fdfs.thumb-image.width=150
+fdfs.thumb-image.height=150
+fdfs.tracker-list=121.89.222.103:22122
+
From 8ca8f27c67acd80463583f4a7f1df2740c4e75f9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Mon, 15 Mar 2021 19:35:14 +0800
Subject: [PATCH 02/14] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
file-common/pom.xml | 16 -----
.../common/exception/UploadException.java | 12 ++++
.../exception/UploadGeneralException.java | 16 +++++
.../qiwenshare/common/upload/Uploader.java | 21 +------
.../upload/product/AliyunOSSUploader.java | 36 +++++------
.../common/upload/product/ChunkUploader.java | 23 ++++---
.../upload/product/FastDFSUploader.java | 62 +++++++++++--------
.../file/controller/TaskController.java | 5 +-
8 files changed, 96 insertions(+), 95 deletions(-)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/exception/UploadException.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/exception/UploadGeneralException.java
diff --git a/file-common/pom.xml b/file-common/pom.xml
index 434f716..da8a36b 100644
--- a/file-common/pom.xml
+++ b/file-common/pom.xml
@@ -43,28 +43,12 @@
jjwt
0.9.1
-
-
-
-
-
-
-
-
-
-
-
com.github.tobato
fastdfs-client
1.26.2
-
- redis.clients
- jedis
- 3.0.1
-
diff --git a/file-common/src/main/java/com/qiwenshare/common/exception/UploadException.java b/file-common/src/main/java/com/qiwenshare/common/exception/UploadException.java
new file mode 100644
index 0000000..c83a7e1
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/exception/UploadException.java
@@ -0,0 +1,12 @@
+package com.qiwenshare.common.exception;
+
+public abstract class UploadException extends RuntimeException{
+
+ protected UploadException(String message) {
+ super(message);
+ }
+
+ protected UploadException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/exception/UploadGeneralException.java b/file-common/src/main/java/com/qiwenshare/common/exception/UploadGeneralException.java
new file mode 100644
index 0000000..a974354
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/exception/UploadGeneralException.java
@@ -0,0 +1,16 @@
+package com.qiwenshare.common.exception;
+
+public class UploadGeneralException extends UploadException{
+
+ public UploadGeneralException(Throwable cause) {
+ super("上传出现了异常", cause);
+ }
+
+ public UploadGeneralException(String message) {
+ super(message);
+ }
+
+ public UploadGeneralException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
index 8b01901..b9615a0 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
@@ -27,26 +27,7 @@ public abstract class Uploader {
protected StandardMultipartHttpServletRequest request = null;
public abstract List upload(HttpServletRequest request);
-//
-//
-// protected static TrackerServer trackerServer = null;
-//
-// protected static StorageServer storageServer = null;
-//
-// static {
-// try {
-// //String filePath = new ClassPathResource("fdfs_client.conf").getFile().getAbsolutePath();;
-// Properties properties = new Properties();
-// properties.setProperty("tracker_server ", "121.89.222.103");
-// properties.setProperty("http.tracker_http_port", "8090");
-// ClientGlobal.initByProperties(properties);
-// TrackerClient trackerClient = new TrackerClient();
-// trackerServer = trackerClient.getConnection();
-// storageServer = trackerClient.getStoreStorage(trackerServer);
-// } catch (Exception e) {
-// log.error("FastDFS Client Init Fail!",e);
-// }
-// }
+
/**
* 根据字符串创建本地目录 并按照日期建立子目录返回
*
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
index 9414f6d..8d9518d 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
@@ -6,6 +6,7 @@ import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
import com.qiwenshare.common.domain.AliyunOSS;
import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.exception.UploadGeneralException;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.common.util.PathUtil;
@@ -63,38 +64,32 @@ public class AliyunOSSUploader extends Uploader {
bucketName = aliyunOSS.getBucketName();
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(0);
- uploadFile.setMessage("未包含文件上传域");
- saveUploadFileList.add(uploadFile);
- return saveUploadFileList;
+ throw new UploadGeneralException("未包含文件上传域");
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(0);
+// uploadFile.setMessage("未包含文件上传域");
+// saveUploadFileList.add(uploadFile);
+// return saveUploadFileList;
}
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
String savePath = getSaveFilePath();
dff.setRepository(new File(savePath));
- try {
- ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
- sfu.setSizeMax(this.maxSize * 1024L);
- sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
- Iterator iter = this.request.getFileNames();
- while (iter.hasNext()) {
+ ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
+ sfu.setSizeMax(this.maxSize * 1024L);
+ sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
+ Iterator iter = this.request.getFileNames();
+ while (iter.hasNext()) {
- saveUploadFileList = doUpload(savePath, iter);
- }
- } catch (IOException e) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(1);
- uploadFile.setMessage("未知错误");
- saveUploadFileList.add(uploadFile);
- e.printStackTrace();
+ saveUploadFileList = doUpload(savePath, iter);
}
+
logger.info("结束上传");
return saveUploadFileList;
}
- private List doUpload(String savePath, Iterator iter) throws IOException {
+ private List doUpload(String savePath, Iterator iter) {
OSS ossClient = getClient();
List saveUploadFileList = new ArrayList<>();
@@ -174,6 +169,7 @@ public class AliyunOSSUploader extends Uploader {
} catch (Exception e) {
logger.error("上传出错:" + e);
+ throw new UploadGeneralException(e);
}
uploadFile.setIsOSS(1);
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
index 36efb75..6e530dd 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
@@ -2,6 +2,7 @@ package com.qiwenshare.common.upload.product;
import com.qiwenshare.common.cbb.NotSameFileExpection;
import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.exception.UploadGeneralException;
import com.qiwenshare.common.operation.ImageOperation;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.util.FileUtil;
@@ -42,11 +43,12 @@ public class ChunkUploader extends Uploader {
this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(0);
- uploadFile.setMessage("未包含文件上传域");
- saveUploadFileList.add(uploadFile);
- return saveUploadFileList;
+ throw new UploadGeneralException("未包含文件上传域");
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(0);
+// uploadFile.setMessage("未包含文件上传域");
+// saveUploadFileList.add(uploadFile);
+// return saveUploadFileList;
}
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
String savePath = getSaveFilePath();
@@ -61,11 +63,12 @@ public class ChunkUploader extends Uploader {
saveUploadFileList = doUpload(savePath, iter);
}
} catch (IOException e) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(1);
- uploadFile.setMessage("未知错误");
- saveUploadFileList.add(uploadFile);
- e.printStackTrace();
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(1);
+// uploadFile.setMessage("未知错误");
+// saveUploadFileList.add(uploadFile);
+// e.printStackTrace();
+ throw new UploadGeneralException("未包含文件上传域");
} catch (NotSameFileExpection notSameFileExpection) {
notSameFileExpection.printStackTrace();
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
index af5c5cd..fc2a838 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
@@ -3,6 +3,7 @@ package com.qiwenshare.common.upload.product;
import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.exception.UploadGeneralException;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.common.util.PathUtil;
@@ -50,11 +51,12 @@ public class FastDFSUploader extends Uploader {
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(0);
- uploadFile.setMessage("未包含文件上传域");
- saveUploadFileList.add(uploadFile);
- return saveUploadFileList;
+ throw new UploadGeneralException("未包含文件上传域");
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(0);
+// uploadFile.setMessage("未包含文件上传域");
+// saveUploadFileList.add(uploadFile);
+// return saveUploadFileList;
}
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
String savePath = getSaveFilePath();
@@ -69,12 +71,13 @@ public class FastDFSUploader extends Uploader {
saveUploadFileList = doUpload(savePath, iter);
}
- } catch (IOException e) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(1);
- uploadFile.setMessage("未知错误");
- saveUploadFileList.add(uploadFile);
- e.printStackTrace();
+ } catch (Exception e) {
+ throw new UploadGeneralException(e);
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(1);
+// uploadFile.setMessage("未知错误");
+// saveUploadFileList.add(uploadFile);
+// e.printStackTrace();
}
log.info("结束上传");
@@ -83,16 +86,14 @@ public class FastDFSUploader extends Uploader {
- private List doUpload(String savePath, Iterator iter) throws IOException{
+ private List doUpload(String savePath, Iterator iter){
List saveUploadFileList = new ArrayList<>();
try {
MultipartFile multipartfile = this.request.getFile(iter.next());
- boolean uploadResult = uploadFileChunk(multipartfile);
- if (!uploadResult) {
+ uploadFileChunk(multipartfile);
- }
String timeStampName = getTimeStampName();
String originalName = multipartfile.getOriginalFilename();
@@ -122,7 +123,8 @@ public class FastDFSUploader extends Uploader {
}
} catch (Exception e) {
- log.error("上传出错:" + e);
+ throw new UploadGeneralException(e);
+// log.error("上传出错:" + e);
}
uploadFile.setIsOSS(1);
@@ -132,7 +134,7 @@ public class FastDFSUploader extends Uploader {
return saveUploadFileList;
}
- public boolean uploadFileChunk(MultipartFile multipartFile) {
+ public void uploadFileChunk(MultipartFile multipartFile) {
// 存储在fastdfs不带组的路径
// String noGroupPath = "";
@@ -150,7 +152,8 @@ public class FastDFSUploader extends Uploader {
// return false;
// }
if (lock != null && lock) {
- return false;
+ throw new UploadGeneralException("请求块锁失败");
+ //return false;
}
LOCK_MAP.put(uploadFile.getIdentifier(), true);
// 写入锁的当前拥有者
@@ -167,10 +170,12 @@ public class FastDFSUploader extends Uploader {
//此段代码保证顺序,如果满足条件则返回失败
if (uploadFile.getChunkNumber() < currentChunkInRedis) {
log.info("当前文件块已上传");
- return false;
+ throw new UploadGeneralException("当前文件块已上传");
+// return false;
} else if (uploadFile.getChunkNumber() > currentChunkInRedis) {
log.info("当前文件块需要等待上传,稍后请重试");
- return false;
+ throw new UploadGeneralException("当前文件块需要等待上传,稍后请重试");
+// return false;
}
log.info("***********开始上传第{}块**********", uploadFile.getChunkNumber());
@@ -190,12 +195,14 @@ public class FastDFSUploader extends Uploader {
if (storePath == null) {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.info("获取远程文件路径出错");
- return false;
+ throw new UploadGeneralException("获取远程文件路径出错");
+// return false;
}
} catch (Exception e) {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.error("初次上传远程文件出错", e);
- return false;
+ throw new UploadGeneralException("初次上传远程文件出错", e);
+// return false;
}
STORE_PATH.put(uploadFile.getIdentifier(), storePath.getPath());
@@ -207,7 +214,8 @@ public class FastDFSUploader extends Uploader {
if (path == null) {
log.error("无法获取已上传服务器文件地址");
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
- return false;
+ throw new UploadGeneralException("无法获取已上传服务器文件地址");
+// return false;
}
try {
Long alreadySize = UPLOADED_SIZE.get(uploadFile.getIdentifier());
@@ -220,12 +228,14 @@ public class FastDFSUploader extends Uploader {
} catch (Exception e) {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.error("更新远程文件出错", e);
- return false;
+ throw new UploadGeneralException("更新远程文件出错", e);
+// return false;
}
}
} catch (Exception e) {
log.error("上传文件错误", e);
- return false;
+ throw new UploadGeneralException("上传文件错误", e);
+// return false;
}
} finally {
// 锁的当前拥有者才能释放块上传锁
@@ -235,6 +245,6 @@ public class FastDFSUploader extends Uploader {
}
}
log.info("***********第{}块上传成功**********", uploadFile.getChunkNumber());
- return true;
+// return true;
}
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
index f3cc6f7..81a8d78 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
@@ -28,7 +28,7 @@ public class TaskController {
@Scheduled(cron = "0 0/1 * * * ?")
public void deleteFile() {
- log.info("111112");
+
LambdaQueryWrapper fileBeanLambdaQueryWrapper = new LambdaQueryWrapper<>();
fileBeanLambdaQueryWrapper.eq(FileBean::getPointCount, 0);
@@ -39,8 +39,7 @@ public class TaskController {
fileService.deleteLocalFile(fileBean);
fileService.removeById(fileBean.getFileId());
}
- fileService.remove(fileBeanLambdaQueryWrapper);
+// fileService.remove(fileBeanLambdaQueryWrapper);
- log.info("11111");
}
}
From 716e66b394d1293078ff0e88d540f728967f189e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Tue, 16 Mar 2021 20:42:22 +0800
Subject: [PATCH 03/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../qiwenshare/common/util/JedisConfig.java | 403 ------------------
.../qiwenshare/common/util/RandomUtil.java | 24 --
.../advice/GlobalExceptionHandlerAdvice.java | 6 +
.../qiwenshare/file/api/IUserFileService.java | 2 +-
.../file/controller/FileController.java | 28 +-
.../file/controller/ShareController.java | 4 +-
.../qiwenshare/file/dto/DeleteFileDTO.java | 5 +
.../file/service/RecoveryFileService.java | 63 +++
.../file/service/UserFileService.java | 78 +++-
9 files changed, 154 insertions(+), 459 deletions(-)
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/util/RandomUtil.java
diff --git a/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java b/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
deleted file mode 100644
index 1e8b64b..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/util/JedisConfig.java
+++ /dev/null
@@ -1,403 +0,0 @@
-//package com.qiwenshare.common.util;
-//
-//import cn.hutool.core.util.StrUtil;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import redis.clients.jedis.Jedis;
-//import redis.clients.jedis.JedisPool;
-//import redis.clients.jedis.JedisPoolConfig;
-//
-//import java.util.List;
-//
-///**
-// * @Description: JedisConfig
-// * @ClassName: JedisConfig
-// * @Author: xxx
-// * @Date: 2019/12/31 16:23
-// * @Version: 1.0
-// */
-//public class JedisConfig {
-//
-// private static Logger logger = LoggerFactory.getLogger(JedisConfig.class);
-//
-// protected static final ThreadLocal threadLocalJedis = new ThreadLocal<>();
-// private static JedisPool jedisPool;
-// /**
-// * Redis服务器IP
-// */
-// private static String ADDR_ARRAY = "192.168.1.122";
-//
-// /**
-// * Redis的端口号
-// */
-// private static int PORT = 6379;
-//
-// /**
-// * 访问密码
-// */
-// private static String AUTH = "123456";
-//
-// /**
-// * 可用连接实例的最大数目,默认值为8
-// * 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
-// */
-// private static int MAX_ACTIVE = -1;
-//
-// /**
-// * 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例,默认值也是8。
-// */
-// private static int MAX_IDLE = 16;
-//
-// /**
-// * 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException;
-// */
-// private static int MAX_WAIT = 1000 * 5;
-//
-// // 超时时间
-// private static int TIMEOUT = 1000 * 5;
-//
-// /**
-// * 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
-// */
-// private static boolean TEST_ON_BORROW = true;
-//
-// /**
-// * redis过期时间,以秒为单位
-// */
-// /**
-// * 一小时
-// */
-// public final static int EXRP_HOUR = 60 * 60;
-// /**
-// * 一天
-// */
-// public final static int EXRP_DAY = 60 * 60 * 24;
-// /**
-// * 一个月
-// */
-// public final static int EXRP_MONTH = 60 * 60 * 24 * 30;
-//
-// public JedisConfig() {
-// }
-//
-// static {
-// initialPool();
-// }
-//
-// /**
-// * 初始化Redis连接池,注意一定要在使用前初始化一次,一般在项目启动时初始化就行了
-// */
-// public static JedisPool initialPool() {
-// JedisPool jp = null;
-// try {
-// JedisPoolConfig config = new JedisPoolConfig();
-// config.setMaxTotal(MAX_ACTIVE);
-// config.setMaxIdle(MAX_IDLE);
-// config.setMaxWaitMillis(MAX_WAIT);
-// config.setTestOnBorrow(TEST_ON_BORROW);
-// config.setTestOnCreate(true);
-// config.setTestWhileIdle(true);
-// config.setTestOnReturn(true);
-// config.setNumTestsPerEvictionRun(-1);
-// jp = new JedisPool(config, ADDR_ARRAY, PORT, TIMEOUT, AUTH);
-// jedisPool = jp;
-// threadLocalJedis.set(getJedis());
-// } catch (Exception e) {
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// }
-// return jp;
-// }
-//
-// /**
-// * 获取Jedis实例,一定先初始化
-// * @return Jedis
-// */
-// public static Jedis getJedis() {
-// boolean success = false;
-// Jedis jedis = null;
-// int i=0;
-// while (!success) {
-// i++;
-// try {
-// if (jedisPool != null) {
-// jedis = threadLocalJedis.get();
-// if (jedis == null){
-// jedis = jedisPool.getResource();
-// }else {
-// if(!jedis.isConnected() && !jedis.getClient().isBroken()){
-// threadLocalJedis.set(null);
-// jedis = jedisPool.getResource();
-// }
-// return jedis;
-// }
-// }else {
-// throw new RuntimeException("redis连接池初始化失败");
-// }
-// } catch (Exception e) {
-// System.out.println(Thread.currentThread().getName()+":第"+i+"次获取失败!!!");
-// success = false;
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// }
-// if (jedis != null){
-// success = true;
-// }
-// if (i >= 10 && i < 20){
-// try {
-// Thread.sleep(1000);
-// } catch (InterruptedException e) {
-// e.printStackTrace();
-// }
-// }
-// if (i >= 20 && i < 30){
-// try {
-// Thread.sleep(2000);
-// } catch (InterruptedException e) {
-// e.printStackTrace();
-// }
-//
-// }
-// if (i >= 30 && i < 40){
-// try {
-// Thread.sleep(3000);
-// } catch (InterruptedException e) {
-// e.printStackTrace();
-// }
-// }
-// if (i >= 40){
-// System.out.println("redis彻底连不上了~~~~(>_<)~~~~");
-// return null;
-// }
-// }
-// if (threadLocalJedis.get() == null) {
-// threadLocalJedis.set(jedis);
-// }
-// return jedis;
-// }
-//
-// /**
-// * 设置 String
-// * @param key
-// * @param value
-// */
-// public static void setString(String key, String value) {
-// Jedis jo = null;
-// try {
-// value = StrUtil.isBlank(value) ? "" : value;
-// jo = getJedis();
-// jo.set(key, value);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis服务器异常");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// /**
-// * 设置 过期时间
-// * @param key
-// * @param seconds 以秒为单位
-// * @param value
-// */
-// public static void setString(String key, int seconds, String value) {
-// Jedis jo = null;
-// try {
-// value = StrUtil.isBlank(value) ? "" : value;
-// jo = getJedis();
-// jo.setex(key, seconds, value);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis服务器异常");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-//
-//
-// }
-//
-// /**
-// * 获取String值
-// * @param key
-// * @return value
-// */
-// public static String getString(String key) {
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// if (jo == null || !jo.exists(key)) {
-// return null;
-// }
-// return jo.get(key);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// public static long incrBy(String key, long integer) {
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.incrBy(key, integer);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// public static long decrBy(String key, long integer) {
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.decrBy(key, integer);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// /**
-// * 删除多个key
-// */
-// public static long delKeys(String [] keys){
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.del(keys);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-//
-// }
-//
-// /**
-// * 删除单个key
-// */
-// public static long delKey(String key){
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.del(key);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-//
-// }
-//
-// /**
-// * 添加到队列尾
-// */
-// public static long rpush(String key,String node){
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.rpush(key,node);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// /**
-// * 删除list元素
-// */
-// public static long delListNode(String key,int count,String value){
-// Jedis jo = null;
-// try {
-// jo = getJedis();
-// return jo.lrem(key,count,value);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// }
-//
-// /**
-// * 获取所有list
-// */
-// public static List getListAll(String key){
-// Jedis jo = null;
-// List list=null;
-// try {
-// jo = getJedis();
-// list= jo.lrange(key,0,-1);
-// } catch (Exception e) {
-// threadLocalJedis.set(null);
-// e.printStackTrace();
-// logger.error("redis服务器异常",e);
-// throw new RuntimeException("redis操作错误");
-// } finally {
-// if (jo != null) {
-// close(jo);
-// }
-// }
-// return list;
-// }
-//
-// /**
-// * 清理缓存redis
-// */
-// public void cleanLoacl(Jedis jo){
-// threadLocalJedis.set(null);
-// close(jo);
-// }
-//
-// public static void close(Jedis jedis) {
-// if (threadLocalJedis.get() == null && jedis != null){
-// jedis.close();
-// }
-// }
-//}
\ No newline at end of file
diff --git a/file-common/src/main/java/com/qiwenshare/common/util/RandomUtil.java b/file-common/src/main/java/com/qiwenshare/common/util/RandomUtil.java
deleted file mode 100644
index c31dd19..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/util/RandomUtil.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.qiwenshare.common.util;
-
-import java.util.Random;
-
-public class RandomUtil {
- public static String getStringRandom(int length) {
-
- String val = "";
- Random random = new Random();
- //参数length,表示生成几位随机数
- for(int i = 0; i < length; i++) {
- String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
- //输出字母还是数字
- if("char".equalsIgnoreCase(charOrNum)){
- //输出是大写字母还是小写字母
- int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
- val += (char)(random.nextInt(26) + temp);
- }else if("num".equalsIgnoreCase(charOrNum)) {
- val += String.valueOf(random.nextInt(10));
- }
- }
- return val;
- }
-}
diff --git a/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java b/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
index 297fd6d..d702b3c 100644
--- a/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
+++ b/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
@@ -3,9 +3,11 @@ package com.qiwenshare.file.advice;
import com.qiwenshare.common.cbb.RestResult;
import com.qiwenshare.common.cbb.ResultCodeEnum;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.client.HttpClientErrorException;
/**
@@ -20,6 +22,7 @@ public class GlobalExceptionHandlerAdvice {
/**-------- 通用异常处理方法 --------**/
@ExceptionHandler(Exception.class)
@ResponseBody
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestResult error(Exception e) {
e.printStackTrace();
log.error("全局异常捕获:" + e);
@@ -30,6 +33,7 @@ public class GlobalExceptionHandlerAdvice {
/**-------- 指定异常处理方法 --------**/
@ExceptionHandler(NullPointerException.class)
@ResponseBody
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestResult error(NullPointerException e) {
e.printStackTrace();
log.error("全局异常捕获:" + e);
@@ -38,6 +42,7 @@ public class GlobalExceptionHandlerAdvice {
/**-------- 下标越界处理方法 --------**/
@ExceptionHandler(IndexOutOfBoundsException.class)
@ResponseBody
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestResult error(IndexOutOfBoundsException e) {
e.printStackTrace();
log.error("全局异常捕获:" + e);
@@ -47,6 +52,7 @@ public class GlobalExceptionHandlerAdvice {
/**-------- 自定义定异常处理方法 --------**/
@ExceptionHandler(CMSException.class)
@ResponseBody
+ @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public RestResult error(CMSException e) {
e.printStackTrace();
log.error("全局异常捕获:" + e);
diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java b/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java
index c5d72e7..88a1b26 100644
--- a/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/api/IUserFileService.java
@@ -21,6 +21,6 @@ public interface IUserFileService extends IService {
Long selectCountNotInExtendNames(List fileNameList, Long beginCount, Long pageCount, long userId);
List selectFileTreeListLikeFilePath(String filePath, long userId);
List selectFilePathTreeByUserId(Long userId);
- void deleteUserFile(UserFile userFile, UserBean sessionUserBean);
+ void deleteUserFile(Long userFileId, Long sessionUserId);
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
index f362f7f..e9b2397 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
@@ -206,15 +206,9 @@ public class FileController {
List userFiles = JSON.parseArray(batchDeleteFileDto.getFiles(), UserFile.class);
DigestUtils.md5Hex("data");
for (UserFile userFile : userFiles) {
- String uuid = UUID.randomUUID().toString();
- userFile.setDeleteBatchNum(uuid);
- userFileService.deleteUserFile(userFile,sessionUserBean);
- RecoveryFile recoveryFile = new RecoveryFile();
- recoveryFile.setUserFileId(userFile.getUserFileId());
- recoveryFile.setDeleteTime(DateUtil.getCurrentTime());
- recoveryFile.setDeleteBatchNum(uuid);
- recoveryFileService.save(recoveryFile);
+ //userFile.setDeleteBatchNum(uuid);
+ userFileService.deleteUserFile(userFile.getUserFileId(),sessionUserBean.getUserId());
}
return RestResult.success().message("批量删除文件成功");
@@ -230,20 +224,16 @@ public class FileController {
return operationCheck(token);
}
- String uuid = UUID.randomUUID().toString();
UserBean sessionUserBean = userService.getUserBeanByToken(token);
- UserFile userFile = new UserFile();
- userFile.setUserFileId(deleteFileDto.getUserFileId());
- userFile.setDeleteBatchNum(uuid);
- BeanUtil.copyProperties(deleteFileDto, userFile);
- userFileService.deleteUserFile(userFile, sessionUserBean);
+// String uuid = UUID.randomUUID().toString();
+
+// UserFile userFile = new UserFile();
+// userFile.setUserFileId(deleteFileDto.getUserFileId());
+//// userFile.setDeleteBatchNum(uuid);
+// BeanUtil.copyProperties(deleteFileDto, userFile);
+ userFileService.deleteUserFile(deleteFileDto.getUserFileId(), sessionUserBean.getUserId());
- RecoveryFile recoveryFile = new RecoveryFile();
- recoveryFile.setUserFileId(deleteFileDto.getUserFileId());
- recoveryFile.setDeleteTime(DateUtil.getCurrentTime());
- recoveryFile.setDeleteBatchNum(uuid);
- recoveryFileService.save(recoveryFile);
return RestResult.success();
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/ShareController.java b/file-web/src/main/java/com/qiwenshare/file/controller/ShareController.java
index 24746ef..53e4762 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/ShareController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/ShareController.java
@@ -1,11 +1,11 @@
package com.qiwenshare.file.controller;
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.cbb.DateUtil;
import com.qiwenshare.common.cbb.RestResult;
-import com.qiwenshare.common.util.RandomUtil;
import com.qiwenshare.file.anno.MyLog;
import com.qiwenshare.file.api.IShareService;
import com.qiwenshare.file.api.IUserService;
@@ -46,7 +46,7 @@ public class ShareController {
public RestResult shareFile(ShareFileDTO shareSecretDTO, @RequestHeader("token") String token) {
ShareFileVO shareSecretVO = new ShareFileVO();
UserBean sessionUserBean = userService.getUserBeanByToken(token);
- String extractionCode = RandomUtil.getStringRandom(6);
+ String extractionCode = RandomUtil.randomNumbers(6);
String uuid = UUID.randomUUID().toString();
Share share = new Share();
BeanUtil.copyProperties(sessionUserBean, share);
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java
index d332468..40f61cd 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java
@@ -8,10 +8,15 @@ import lombok.Data;
public class DeleteFileDTO {
@Schema(description = "用户文件id")
private Long userFileId;
+
+
@Schema(description = "文件路径")
+ @Deprecated
private String filePath;
@Schema(description = "文件名")
+ @Deprecated
private String fileName;
@Schema(description = "是否是目录")
+ @Deprecated
private Integer isDir;
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
index 62f0167..b499df9 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
@@ -1,9 +1,11 @@
package com.qiwenshare.file.service;
+import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.common.cbb.DateUtil;
+import com.qiwenshare.common.util.PathUtil;
import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.RecoveryFile;
@@ -56,6 +58,67 @@ public class RecoveryFileService extends ServiceImpl userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+// userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 0)
+// .set(UserFile::getDeleteBatchNum, "")
+// .eq(UserFile::getDeleteBatchNum, restoreFileDto.getDeleteBatchNum());
+// userFileService.update(userFileLambdaUpdateWrapper);
+//
+// String filePath = PathUtil.getParentPath(restoreFileDto.getFilePath());
+// while(filePath.indexOf("/") != -1) {
+// String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
+// filePath = PathUtil.getParentPath(filePath);
+// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// lambdaQueryWrapper.eq(UserFile::getFilePath, filePath + "/")
+// .eq(UserFile::getDeleteFlag, 0)
+// .eq(UserFile::getUserId, sessionUserBean.getUserId());
+// List userFileList = userFileService.list(lambdaQueryWrapper);
+// if (userFileList.size() == 0) {
+// UserFile userFile = new UserFile();
+// userFile.setUserId(sessionUserBean.getUserId());
+// userFile.setFileName(fileName);
+// userFile.setFilePath(filePath + "/");
+// userFile.setDeleteFlag(0);
+// userFile.setIsDir(1);
+// userFile.setUploadTime(DateUtil.getCurrentTime());
+//
+// userFileService.save(userFile);
+// }
+//
+// }
+//
+// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+//
+// lambdaQueryWrapper.select(UserFile::getFileName, UserFile::getFilePath)
+// .likeRight(UserFile::getFilePath, restoreFileDto.getFilePath())
+// .eq(UserFile::getIsDir, 1)
+// .eq(UserFile::getDeleteFlag, 0)
+// .groupBy(UserFile::getFilePath, UserFile::getFileName)
+// .having("count(fileName) >= 2");
+// List repeatList = userFileService.list(lambdaQueryWrapper);
+//
+// for (UserFile userFile : repeatList) {
+// LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+// lambdaQueryWrapper1.eq(UserFile::getFilePath, userFile.getFilePath())
+// .eq(UserFile::getFileName, userFile.getFileName())
+// .eq(UserFile::getDeleteFlag, "0");
+// List userFiles = userFileService.list(lambdaQueryWrapper1);
+// log.info("重复的文件:" + JSON.toJSONString(userFiles));
+// for (int i = 0; i < userFiles.size() - 1; i ++) {
+// log.info("删除文件:" + JSON.toJSONString(userFiles.get(i)));
+// userFileService.removeById(userFiles.get(i).getUserFileId());
+// }
+// }
+//
+// log.info(JSON.toJSONString(repeatList));
+//
+// LambdaQueryWrapper recoveryFileServiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
+// recoveryFileServiceLambdaQueryWrapper.eq(RecoveryFile::getDeleteBatchNum, restoreFileDto.getDeleteBatchNum());
+// recoveryFileService.remove(recoveryFileServiceLambdaQueryWrapper);
+// }
+
private void updateFilePointCountByBatchNum(String deleteBatchNum) {
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
index 6611dc1..c716042 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
@@ -4,12 +4,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.common.cbb.DateUtil;
+import com.qiwenshare.common.oss.AliyunOSSRename;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.config.QiwenFileConfig;
import com.qiwenshare.file.domain.FileBean;
+import com.qiwenshare.file.domain.RecoveryFile;
import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.mapper.FileMapper;
+import com.qiwenshare.file.mapper.RecoveryFileMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
import com.qiwenshare.file.vo.file.FileListVo;
import lombok.extern.slf4j.Slf4j;
@@ -18,6 +21,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
+import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -29,6 +33,8 @@ public class UserFileService extends ServiceImpl impl
@Resource
FileMapper fileMapper;
@Resource
+ RecoveryFileMapper recoveryFileMapper;
+ @Resource
FiletransferService filetransferService;
@Resource
QiwenFileConfig qiwenFileConfig;
@@ -56,7 +62,53 @@ public class UserFileService extends ServiceImpl impl
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 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 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 lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ lambdaUpdateWrapper
+ .set(FileBean::getFileUrl, newFileUrl)
+ .eq(FileBean::getFileId, fileBean.getFileId());
+ fileMapper.update(null, lambdaUpdateWrapper);
+
+ LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ userFileLambdaUpdateWrapper
+ .set(UserFile::getFileName, newFileName)
+ .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
+ .eq(UserFile::getUserFileId, userFileId);
+ userFileMapper.update(null, userFileLambdaUpdateWrapper);
+ } else {
+ LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ lambdaUpdateWrapper.set(UserFile::getFileName, newFileName)
+ .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
+ .eq(UserFile::getUserFileId, userFileId);
+ userFileMapper.update(null, lambdaUpdateWrapper);
+ }
+
+
+ }
+ }
@Override
public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName) {
@@ -131,37 +183,43 @@ public class UserFileService extends ServiceImpl impl
@Override
- public void deleteUserFile(UserFile userFile, UserBean sessionUserBean) {
-
+ public void deleteUserFile(Long userFileId, Long sessionUserId) {
+// UserFile userFile
+ UserFile userFile = userFileMapper.selectById(userFileId);
+ String uuid = UUID.randomUUID().toString();
if (userFile.getIsDir() == 1) {
LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper();
userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1)
- .set(UserFile::getDeleteBatchNum, userFile.getDeleteBatchNum())
+ .set(UserFile::getDeleteBatchNum, uuid)
.set(UserFile::getDeleteTime, DateUtil.getCurrentTime())
- .eq(UserFile::getUserFileId, userFile.getUserFileId());
+ .eq(UserFile::getUserFileId, userFileId);
userFileMapper.update(null, userFileLambdaUpdateWrapper);
String filePath = userFile.getFilePath() + userFile.getFileName() + "/";
- updateFileDeleteStateByFilePath(filePath, userFile.getDeleteBatchNum(), sessionUserBean.getUserId());
+ updateFileDeleteStateByFilePath(filePath, userFile.getDeleteBatchNum(), sessionUserId);
}else{
- UserFile userFileTemp = userFileMapper.selectById(userFile.getUserFileId());
+ UserFile userFileTemp = userFileMapper.selectById(userFileId);
FileBean fileBean = fileMapper.selectById(userFileTemp.getFileId());
LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 1)
.set(UserFile::getDeleteTime, DateUtil.getCurrentTime())
- .set(UserFile::getDeleteBatchNum, userFile.getDeleteBatchNum())
+ .set(UserFile::getDeleteBatchNum, uuid)
.eq(UserFile::getUserFileId, userFileTemp.getUserFileId());
userFileMapper.update(null, userFileLambdaUpdateWrapper);
-// LambdaUpdateWrapper fileBeanLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
-// fileBeanLambdaUpdateWrapper.set(FileBean::getPointCount, fileBean.getPointCount() -1)
-// .eq(FileBean::getFileId, fileBean.getFileId());
}
+ RecoveryFile recoveryFile = new RecoveryFile();
+ recoveryFile.setUserFileId(userFileId);
+ recoveryFile.setDeleteTime(DateUtil.getCurrentTime());
+ recoveryFile.setDeleteBatchNum(uuid);
+ recoveryFileMapper.insert(recoveryFile);
+
+
}
private void updateFileDeleteStateByFilePath(String filePath, String deleteBatchNum, Long userId) {
From bca2335d0cdcf83991ab41b677da316e571c75f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com>
Date: Tue, 16 Mar 2021 23:36:04 +0800
Subject: [PATCH 04/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/qiwenshare/common/cbb/DateUtil.java | 1 +
.../qiwenshare/common/cbb/ResultCodeEnum.java | 1 +
.../factory/AliyunOSSUploaderFactory.java | 6 ++++
.../upload/factory/ChunkUploaderFactory.java | 6 ++++
.../factory/FastDFSUploaderFactory.java | 6 ++++
.../upload/factory/NormalUploaderFactory.java | 6 ++++
.../upload/factory/UploaderFactory.java | 2 ++
.../common/upload/product/ChunkUploader.java | 21 ------------
.../upload/product/FastDFSUploader.java | 32 ++++---------------
.../advice/GlobalExceptionHandlerAdvice.java | 10 ++++++
.../file/controller/TaskController.java | 3 --
.../file/service/FiletransferService.java | 17 ++++++----
12 files changed, 56 insertions(+), 55 deletions(-)
diff --git a/file-common/src/main/java/com/qiwenshare/common/cbb/DateUtil.java b/file-common/src/main/java/com/qiwenshare/common/cbb/DateUtil.java
index 1d4bb4c..cb8edbe 100644
--- a/file-common/src/main/java/com/qiwenshare/common/cbb/DateUtil.java
+++ b/file-common/src/main/java/com/qiwenshare/common/cbb/DateUtil.java
@@ -7,6 +7,7 @@ import java.util.Calendar;
import java.util.Date;
public class DateUtil {
+
/**
* 获取系统当前时间
*
diff --git a/file-common/src/main/java/com/qiwenshare/common/cbb/ResultCodeEnum.java b/file-common/src/main/java/com/qiwenshare/common/cbb/ResultCodeEnum.java
index bdecd43..1285a9d 100644
--- a/file-common/src/main/java/com/qiwenshare/common/cbb/ResultCodeEnum.java
+++ b/file-common/src/main/java/com/qiwenshare/common/cbb/ResultCodeEnum.java
@@ -12,6 +12,7 @@ public enum ResultCodeEnum {
PARAM_ERROR(false,20002,"参数错误"),
NULL_POINT(false, 20003, "空指针异常"),
INDEX_OUT_OF_BOUNDS(false, 20004, "下标越界异常"),
+ REQUEST_TIMEOUT(false, 20005, "请求超时"),
;
// 响应是否成功
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
index 685c4cb..7620ea6 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
@@ -1,5 +1,6 @@
package com.qiwenshare.common.upload.factory;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.AliyunOSSUploader;
import com.qiwenshare.common.upload.Uploader;
@@ -15,4 +16,9 @@ public class AliyunOSSUploaderFactory implements UploaderFactory {
public Uploader getUploader(UploadFile uploadFile) {
return new AliyunOSSUploader(uploadFile);
}
+
+ @Override
+ public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
+ return null;
+ }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
index 62be6fb..228b4a7 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
@@ -1,5 +1,6 @@
package com.qiwenshare.common.upload.factory;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.ChunkUploader;
import com.qiwenshare.common.upload.Uploader;
@@ -16,5 +17,10 @@ public class ChunkUploaderFactory implements UploaderFactory {
return new ChunkUploader(uploadFile);
}
+ @Override
+ public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
+ return null;
+ }
+
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
index 975d3cd..439e474 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
@@ -1,5 +1,6 @@
package com.qiwenshare.common.upload.factory;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.upload.product.FastDFSUploader;
@@ -14,4 +15,9 @@ public class FastDFSUploaderFactory implements UploaderFactory {
public Uploader getUploader(UploadFile uploadFile) {
return new FastDFSUploader(uploadFile);
}
+
+ @Override
+ public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
+ return new FastDFSUploader(uploadFile, appendFileStorageClient);
+ }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
index c1a4b5a..349b66e 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
@@ -1,5 +1,6 @@
package com.qiwenshare.common.upload.factory;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.NormalUploader;
import com.qiwenshare.common.upload.Uploader;
@@ -15,4 +16,9 @@ public class NormalUploaderFactory implements UploaderFactory {
public Uploader getUploader(UploadFile uploadFile) {
return new NormalUploader();
}
+
+ @Override
+ public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
+ return null;
+ }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
index 7d421d5..f48a550 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
@@ -1,9 +1,11 @@
package com.qiwenshare.common.upload.factory;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.Uploader;
public interface UploaderFactory {
Uploader getUploader();
Uploader getUploader(UploadFile uploadFile);
+ Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient);
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
index 6e530dd..d9e0afe 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
@@ -44,11 +44,6 @@ public class ChunkUploader extends Uploader {
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
-// UploadFile uploadFile = new UploadFile();
-// uploadFile.setSuccess(0);
-// uploadFile.setMessage("未包含文件上传域");
-// saveUploadFileList.add(uploadFile);
-// return saveUploadFileList;
}
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
String savePath = getSaveFilePath();
@@ -63,34 +58,18 @@ public class ChunkUploader extends Uploader {
saveUploadFileList = doUpload(savePath, iter);
}
} catch (IOException e) {
-// UploadFile uploadFile = new UploadFile();
-// uploadFile.setSuccess(1);
-// uploadFile.setMessage("未知错误");
-// saveUploadFileList.add(uploadFile);
-// e.printStackTrace();
throw new UploadGeneralException("未包含文件上传域");
} catch (NotSameFileExpection notSameFileExpection) {
notSameFileExpection.printStackTrace();
}
-
-
return saveUploadFileList;
-
-
}
private List doUpload(String savePath, Iterator iter) throws IOException, NotSameFileExpection {
List saveUploadFileList = new ArrayList();
- //UploadFile uploadFile = new UploadFile();
MultipartFile multipartfile = this.request.getFile(iter.next());
- //InputStream inputStream = multipartfile.getInputStream();
String timeStampName = uploadFile.getIdentifier();
-// .getTimeStampName();
-// if (StringUtils.isEmpty(uploadFile.getTimeStampName())) {
-// timeStampName = getTimeStampName();
-// }
-
String originalName = multipartfile.getOriginalFilename();
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
index fc2a838..1558561 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
@@ -17,13 +17,10 @@ import org.springframework.web.multipart.support.StandardMultipartHttpServletReq
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
-import java.io.IOException;
import java.util.*;
@Slf4j
-@Component
public class FastDFSUploader extends Uploader {
- @Resource
AppendFileStorageClient defaultAppendFileStorageClient;
UploadFile uploadFile;
@@ -41,6 +38,11 @@ public class FastDFSUploader extends Uploader {
this.uploadFile = uploadFile;
}
+ public FastDFSUploader(UploadFile uploadFile, AppendFileStorageClient defaultAppendFileStorageClient) {
+ this.uploadFile = uploadFile;
+ this.defaultAppendFileStorageClient = defaultAppendFileStorageClient;
+ }
+
@Override
public List upload(HttpServletRequest request) {
@@ -52,11 +54,6 @@ public class FastDFSUploader extends Uploader {
boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
-// UploadFile uploadFile = new UploadFile();
-// uploadFile.setSuccess(0);
-// uploadFile.setMessage("未包含文件上传域");
-// saveUploadFileList.add(uploadFile);
-// return saveUploadFileList;
}
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
String savePath = getSaveFilePath();
@@ -68,16 +65,10 @@ public class FastDFSUploader extends Uploader {
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
Iterator iter = this.request.getFileNames();
while (iter.hasNext()) {
-
saveUploadFileList = doUpload(savePath, iter);
}
} catch (Exception e) {
throw new UploadGeneralException(e);
-// UploadFile uploadFile = new UploadFile();
-// uploadFile.setSuccess(1);
-// uploadFile.setMessage("未知错误");
-// saveUploadFileList.add(uploadFile);
-// e.printStackTrace();
}
log.info("结束上传");
@@ -124,7 +115,6 @@ public class FastDFSUploader extends Uploader {
} catch (Exception e) {
throw new UploadGeneralException(e);
-// log.error("上传出错:" + e);
}
uploadFile.setIsOSS(1);
@@ -146,14 +136,8 @@ public class FastDFSUploader extends Uploader {
try {
Boolean lock = LOCK_MAP.get(uploadFile.getIdentifier());
-//
-// if (lock == null){
-// log.info("请求块锁失败");
-// return false;
-// }
if (lock != null && lock) {
throw new UploadGeneralException("请求块锁失败");
- //return false;
}
LOCK_MAP.put(uploadFile.getIdentifier(), true);
// 写入锁的当前拥有者
@@ -187,7 +171,7 @@ public class FastDFSUploader extends Uploader {
log.info("上传第一块");
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber() + 1);
try {
- storePath = defaultAppendFileStorageClient.uploadAppenderFile("default_group", multipartFile.getInputStream(),
+ storePath = defaultAppendFileStorageClient.uploadAppenderFile("group1", multipartFile.getInputStream(),
multipartFile.getSize(), FileUtil.getFileExtendName(multipartFile.getOriginalFilename()));
// 记录第一个分片上传的大小
UPLOADED_SIZE.put(uploadFile.getIdentifier(), uploadFile.getCurrentChunkSize());
@@ -220,7 +204,7 @@ public class FastDFSUploader extends Uploader {
try {
Long alreadySize = UPLOADED_SIZE.get(uploadFile.getIdentifier());
// 追加方式实际实用如果中途出错多次,可能会出现重复追加情况,这里改成修改模式,即时多次传来重复文件块,依然可以保证文件拼接正确
- defaultAppendFileStorageClient.modifyFile("default_group", path, multipartFile.getInputStream(),
+ defaultAppendFileStorageClient.modifyFile("group1", path, multipartFile.getInputStream(),
multipartFile.getSize(), alreadySize);
// 记录分片上传的大小
UPLOADED_SIZE.put(uploadFile.getIdentifier(), alreadySize + multipartFile.getSize());
@@ -241,10 +225,8 @@ public class FastDFSUploader extends Uploader {
// 锁的当前拥有者才能释放块上传锁
if (currOwner) {
LOCK_MAP.put(uploadFile.getIdentifier(), false);
- //JedisConfig.setString(chunkLockName, "0");
}
}
log.info("***********第{}块上传成功**********", uploadFile.getChunkNumber());
-// return true;
}
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java b/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
index d702b3c..9b526ea 100644
--- a/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
+++ b/file-web/src/main/java/com/qiwenshare/file/advice/GlobalExceptionHandlerAdvice.java
@@ -2,6 +2,7 @@ package com.qiwenshare.file.advice;
import com.qiwenshare.common.cbb.RestResult;
import com.qiwenshare.common.cbb.ResultCodeEnum;
+import com.qiwenshare.common.exception.UploadGeneralException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
@@ -49,6 +50,15 @@ public class GlobalExceptionHandlerAdvice {
return RestResult.setResult(ResultCodeEnum.INDEX_OUT_OF_BOUNDS);
}
+ @ExceptionHandler(UploadGeneralException.class)
+ @ResponseBody
+ @ResponseStatus(HttpStatus.REQUEST_TIMEOUT)
+ public RestResult error(UploadGeneralException e) {
+ e.printStackTrace();
+ log.error("全局异常捕获:" + e);
+ return RestResult.setResult(ResultCodeEnum.REQUEST_TIMEOUT);
+ }
+
/**-------- 自定义定异常处理方法 --------**/
@ExceptionHandler(CMSException.class)
@ResponseBody
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
index 81a8d78..20e40c5 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
@@ -20,9 +20,6 @@ import java.util.List;
@Controller
public class TaskController {
- @Resource
- UserFileService userFileService;
-
@Resource
FileService fileService;
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
index ee5caa1..e2ed934 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.cbb.DateUtil;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.factory.AliyunOSSUploaderFactory;
@@ -40,6 +41,8 @@ public class FiletransferService implements IFiletransferService {
QiwenFileConfig qiwenFileConfig;
@Resource
UserFileMapper userFileMapper;
+ @Resource
+ AppendFileStorageClient defaultAppendFileStorageClient;
@@ -56,12 +59,14 @@ public class FiletransferService implements IFiletransferService {
uploadFile.setIdentifier(UploadFileDto.getIdentifier());
uploadFile.setTotalSize(UploadFileDto.getTotalSize());
uploadFile.setCurrentChunkSize(UploadFileDto.getCurrentChunkSize());
- if (oss.isEnabled()) {
- uploader = new AliyunOSSUploaderFactory().getUploader(uploadFile);
- } else if ("FastFDS".equals(storyType)) {
- uploader = new FastDFSUploaderFactory().getUploader(uploadFile);
- } else {
- uploader = new ChunkUploaderFactory().getUploader(uploadFile);
+ synchronized (FiletransferService.class) {
+ if (oss.isEnabled()) {
+ uploader = new AliyunOSSUploaderFactory().getUploader(uploadFile);
+ } else if ("FastFDS".equals(storyType)) {
+ uploader = new FastDFSUploaderFactory().getUploader(uploadFile, defaultAppendFileStorageClient);
+ } else {
+ uploader = new ChunkUploaderFactory().getUploader(uploadFile);
+ }
}
List uploadFileList = uploader.upload(request);
From 036048261020dae333227aa56e12556bf324caa8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Thu, 18 Mar 2021 20:48:15 +0800
Subject: [PATCH 05/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../factory/AliyunOSSUploaderFactory.java | 9 +-
.../upload/factory/ChunkUploaderFactory.java | 9 +-
.../factory/FastDFSUploaderFactory.java | 13 +-
.../upload/factory/NormalUploaderFactory.java | 8 +-
.../upload/factory/UploaderFactory.java | 1 -
.../com/qiwenshare/file/FileApplication.java | 7 ++
.../controller/FiletransferController.java | 88 +++++++++++++
.../qiwenshare/file/dto/DownloadFileDTO.java | 10 ++
.../file/service/FiletransferService.java | 14 ++-
.../file/service/RecoveryFileService.java | 118 +++++++++---------
10 files changed, 195 insertions(+), 82 deletions(-)
create mode 100644 file-web/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
index 7620ea6..2661666 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
@@ -4,9 +4,14 @@ import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.AliyunOSSUploader;
import com.qiwenshare.common.upload.Uploader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+@Component
public class AliyunOSSUploaderFactory implements UploaderFactory {
+
@Override
public Uploader getUploader() {
return new AliyunOSSUploader();
@@ -17,8 +22,4 @@ public class AliyunOSSUploaderFactory implements UploaderFactory {
return new AliyunOSSUploader(uploadFile);
}
- @Override
- public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
- return null;
- }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
index 228b4a7..830104a 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
@@ -4,7 +4,11 @@ import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.ChunkUploader;
import com.qiwenshare.common.upload.Uploader;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+
+@Component
public class ChunkUploaderFactory implements UploaderFactory {
@Override
@@ -17,10 +21,5 @@ public class ChunkUploaderFactory implements UploaderFactory {
return new ChunkUploader(uploadFile);
}
- @Override
- public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
- return null;
- }
-
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
index 439e474..5e6a80f 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
@@ -4,8 +4,15 @@ import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.upload.product.FastDFSUploader;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+
+@Component
public class FastDFSUploaderFactory implements UploaderFactory {
+
+ @Resource
+ AppendFileStorageClient defaultAppendFileStorageClient;
@Override
public Uploader getUploader() {
return new FastDFSUploader();
@@ -13,11 +20,7 @@ public class FastDFSUploaderFactory implements UploaderFactory {
@Override
public Uploader getUploader(UploadFile uploadFile) {
- return new FastDFSUploader(uploadFile);
+ return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
}
- @Override
- public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
- return new FastDFSUploader(uploadFile, appendFileStorageClient);
- }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
index 349b66e..145dfa7 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
@@ -4,7 +4,11 @@ import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.upload.product.NormalUploader;
import com.qiwenshare.common.upload.Uploader;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
+
+@Component
public class NormalUploaderFactory implements UploaderFactory {
@Override
@@ -17,8 +21,4 @@ public class NormalUploaderFactory implements UploaderFactory {
return new NormalUploader();
}
- @Override
- public Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient) {
- return null;
- }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
index f48a550..99a4793 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
@@ -7,5 +7,4 @@ import com.qiwenshare.common.upload.Uploader;
public interface UploaderFactory {
Uploader getUploader();
Uploader getUploader(UploadFile uploadFile);
- Uploader getUploader(UploadFile uploadFile, AppendFileStorageClient appendFileStorageClient);
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/FileApplication.java b/file-web/src/main/java/com/qiwenshare/file/FileApplication.java
index 1c7bc5b..bb625b1 100644
--- a/file-web/src/main/java/com/qiwenshare/file/FileApplication.java
+++ b/file-web/src/main/java/com/qiwenshare/file/FileApplication.java
@@ -3,6 +3,8 @@ package com.qiwenshare.file;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.FilterType;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -11,6 +13,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableScheduling
//@EnableDiscoveryClient
@EnableTransactionManagement
+@ComponentScan(value = "com.qiwenshare", excludeFilters = @ComponentScan.Filter(
+ type = FilterType.ASSIGNABLE_TYPE,
+ classes = {
+ }
+))
public class FileApplication {
public static void main(String[] args) {
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index ff229b3..cca748c 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -1,8 +1,13 @@
package com.qiwenshare.file.controller;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.model.OSSObject;
import com.qiwenshare.common.cbb.DateUtil;
+import com.qiwenshare.common.operation.FileOperation;
+import com.qiwenshare.common.oss.AliyunOSSDownload;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.common.cbb.RestResult;
+import com.qiwenshare.common.util.PathUtil;
import com.qiwenshare.file.anno.MyLog;
import com.qiwenshare.file.api.IFileService;
import com.qiwenshare.file.api.IFiletransferService;
@@ -13,6 +18,7 @@ import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.StorageBean;
import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile;
+import com.qiwenshare.file.dto.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO;
import com.qiwenshare.file.vo.file.UploadFileVo;
import io.swagger.v3.oas.annotations.Operation;
@@ -22,6 +28,8 @@ import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -120,6 +128,86 @@ public class FiletransferController {
}
+ /**
+ * 下载文件
+ *
+ * @return
+ */
+ @Operation(summary = "下载文件", description = "下载文件接口", tags = {"filetransfer"})
+ @MyLog(operation = "下载文件", module = CURRENT_MODULE)
+ @RequestMapping(value = "/downloadfile", method = RequestMethod.GET)
+ public String downloadFile(HttpServletResponse response, DownloadFileDTO downloadFileDTO) {
+ UserFile userFile = userFileService.getById(downloadFileDTO.getUserFileId());
+
+ String fileName = userFile.getFileName() + "." + userFile.getExtendName();
+ response.setContentType("application/force-download");// 设置强制下载不打开
+ response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
+ byte[] buffer = new byte[1024];
+ BufferedInputStream bis = null;
+ FileBean fileBean = fileService.getById(userFile.getFileId());
+ if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
+
+ AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
+ OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
+ OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), fileBean.getTimeStampName());
+ InputStream inputStream = ossObject.getObjectContent();
+ try {
+ bis = new BufferedInputStream(inputStream);
+ OutputStream os = response.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+ ossClient.shutdown();
+ } else {
+ //设置文件路径
+ File file = FileOperation.newFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
+ if (file.exists()) {
+
+
+ FileInputStream fis = null;
+
+ try {
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
+ OutputStream os = response.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+
+ }
+ return null;
+
+ }
+
@Operation(summary = "获取存储信息", description = "获取存储信息", tags = {"filetransfer"})
@RequestMapping(value = "/getstorage", method = RequestMethod.GET)
@ResponseBody
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java
new file mode 100644
index 0000000..83c7ae9
--- /dev/null
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/DownloadFileDTO.java
@@ -0,0 +1,10 @@
+package com.qiwenshare.file.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+@Schema(name = "下载文件DTO",required = true)
+public class DownloadFileDTO {
+ private Long userFileId;
+}
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
index e2ed934..aa8aead 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
@@ -15,6 +15,7 @@ import com.qiwenshare.common.upload.factory.AliyunOSSUploaderFactory;
import com.qiwenshare.common.upload.factory.ChunkUploaderFactory;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.upload.factory.FastDFSUploaderFactory;
+import com.qiwenshare.common.upload.factory.UploaderFactory;
import com.qiwenshare.file.api.IFiletransferService;
import com.qiwenshare.common.domain.AliyunOSS;
@@ -41,8 +42,13 @@ public class FiletransferService implements IFiletransferService {
QiwenFileConfig qiwenFileConfig;
@Resource
UserFileMapper userFileMapper;
+
@Resource
- AppendFileStorageClient defaultAppendFileStorageClient;
+ UploaderFactory fastDFSUploaderFactory;
+ @Resource
+ UploaderFactory aliyunOSSUploaderFactory;
+ @Resource
+ UploaderFactory chunkUploaderFactory;
@@ -61,11 +67,11 @@ public class FiletransferService implements IFiletransferService {
uploadFile.setCurrentChunkSize(UploadFileDto.getCurrentChunkSize());
synchronized (FiletransferService.class) {
if (oss.isEnabled()) {
- uploader = new AliyunOSSUploaderFactory().getUploader(uploadFile);
+ uploader = aliyunOSSUploaderFactory.getUploader(uploadFile);
} else if ("FastFDS".equals(storyType)) {
- uploader = new FastDFSUploaderFactory().getUploader(uploadFile, defaultAppendFileStorageClient);
+ uploader = fastDFSUploaderFactory.getUploader(uploadFile);
} else {
- uploader = new ChunkUploaderFactory().getUploader(uploadFile);
+ uploader = chunkUploaderFactory.getUploader(uploadFile);
}
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
index b499df9..859c7b8 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/RecoveryFileService.java
@@ -59,65 +59,65 @@ public class RecoveryFileService extends ServiceImpl userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
-// userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 0)
-// .set(UserFile::getDeleteBatchNum, "")
-// .eq(UserFile::getDeleteBatchNum, restoreFileDto.getDeleteBatchNum());
-// userFileService.update(userFileLambdaUpdateWrapper);
-//
-// String filePath = PathUtil.getParentPath(restoreFileDto.getFilePath());
-// while(filePath.indexOf("/") != -1) {
-// String fileName = filePath.substring(filePath.lastIndexOf("/") + 1);
-// filePath = PathUtil.getParentPath(filePath);
-// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
-// lambdaQueryWrapper.eq(UserFile::getFilePath, filePath + "/")
-// .eq(UserFile::getDeleteFlag, 0)
-// .eq(UserFile::getUserId, sessionUserBean.getUserId());
-// List userFileList = userFileService.list(lambdaQueryWrapper);
-// if (userFileList.size() == 0) {
-// UserFile userFile = new UserFile();
-// userFile.setUserId(sessionUserBean.getUserId());
-// userFile.setFileName(fileName);
-// userFile.setFilePath(filePath + "/");
-// userFile.setDeleteFlag(0);
-// userFile.setIsDir(1);
-// userFile.setUploadTime(DateUtil.getCurrentTime());
-//
-// userFileService.save(userFile);
-// }
-//
-// }
-//
-// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
-//
-// lambdaQueryWrapper.select(UserFile::getFileName, UserFile::getFilePath)
-// .likeRight(UserFile::getFilePath, restoreFileDto.getFilePath())
-// .eq(UserFile::getIsDir, 1)
-// .eq(UserFile::getDeleteFlag, 0)
-// .groupBy(UserFile::getFilePath, UserFile::getFileName)
-// .having("count(fileName) >= 2");
-// List repeatList = userFileService.list(lambdaQueryWrapper);
-//
-// for (UserFile userFile : repeatList) {
-// LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
-// lambdaQueryWrapper1.eq(UserFile::getFilePath, userFile.getFilePath())
-// .eq(UserFile::getFileName, userFile.getFileName())
-// .eq(UserFile::getDeleteFlag, "0");
-// List userFiles = userFileService.list(lambdaQueryWrapper1);
-// log.info("重复的文件:" + JSON.toJSONString(userFiles));
-// for (int i = 0; i < userFiles.size() - 1; i ++) {
-// log.info("删除文件:" + JSON.toJSONString(userFiles.get(i)));
-// userFileService.removeById(userFiles.get(i).getUserFileId());
-// }
-// }
-//
-// log.info(JSON.toJSONString(repeatList));
-//
-// LambdaQueryWrapper recoveryFileServiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
-// recoveryFileServiceLambdaQueryWrapper.eq(RecoveryFile::getDeleteBatchNum, restoreFileDto.getDeleteBatchNum());
-// recoveryFileService.remove(recoveryFileServiceLambdaQueryWrapper);
-// }
+ public void restorefile(String deleteBatchNum, String filePath, Long sessionUserId) {
+ LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+ userFileLambdaUpdateWrapper.set(UserFile::getDeleteFlag, 0)
+ .set(UserFile::getDeleteBatchNum, "")
+ .eq(UserFile::getDeleteBatchNum, deleteBatchNum);
+ userFileMapper.update(null, userFileLambdaUpdateWrapper);
+
+ String parentFilePath = PathUtil.getParentPath(filePath);
+ while(parentFilePath.indexOf("/") != -1) {
+ String fileName = parentFilePath.substring(parentFilePath.lastIndexOf("/") + 1);
+ parentFilePath = PathUtil.getParentPath(parentFilePath);
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper.eq(UserFile::getFilePath, parentFilePath + "/")
+ .eq(UserFile::getDeleteFlag, 0)
+ .eq(UserFile::getUserId, sessionUserId);
+ List userFileList = userFileMapper.selectList(lambdaQueryWrapper);
+ if (userFileList.size() == 0) {
+ UserFile userFile = new UserFile();
+ userFile.setUserId(sessionUserId);
+ userFile.setFileName(fileName);
+ userFile.setFilePath(parentFilePath + "/");
+ userFile.setDeleteFlag(0);
+ userFile.setIsDir(1);
+ userFile.setUploadTime(DateUtil.getCurrentTime());
+
+ userFileMapper.insert(userFile);
+ }
+
+ }
+
+ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+
+ lambdaQueryWrapper.select(UserFile::getFileName, UserFile::getFilePath)
+ .likeRight(UserFile::getFilePath, filePath)
+ .eq(UserFile::getIsDir, 1)
+ .eq(UserFile::getDeleteFlag, 0)
+ .groupBy(UserFile::getFilePath, UserFile::getFileName)
+ .having("count(fileName) >= 2");
+ List repeatList = userFileMapper.selectList(lambdaQueryWrapper);
+
+ for (UserFile userFile : repeatList) {
+ LambdaQueryWrapper lambdaQueryWrapper1 = new LambdaQueryWrapper<>();
+ lambdaQueryWrapper1.eq(UserFile::getFilePath, userFile.getFilePath())
+ .eq(UserFile::getFileName, userFile.getFileName())
+ .eq(UserFile::getDeleteFlag, "0");
+ List userFiles = userFileMapper.selectList(lambdaQueryWrapper1);
+ log.info("重复的文件:" + JSON.toJSONString(userFiles));
+ for (int i = 0; i < userFiles.size() - 1; i ++) {
+ log.info("删除文件:" + JSON.toJSONString(userFiles.get(i)));
+ userFileMapper.deleteById(userFiles.get(i).getUserFileId());
+ }
+ }
+
+ log.info(JSON.toJSONString(repeatList));
+
+ LambdaQueryWrapper recoveryFileServiceLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ recoveryFileServiceLambdaQueryWrapper.eq(RecoveryFile::getDeleteBatchNum, deleteBatchNum);
+ recoveryFileMapper.delete(recoveryFileServiceLambdaQueryWrapper);
+ }
From d9d306951394a1cc4b0eb9fbba46a422ad2dd5bb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Thu, 18 Mar 2021 21:19:55 +0800
Subject: [PATCH 06/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=BC=8F=E6=8F=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/qiwenshare/common/upload/product/AliyunOSSUploader.java | 2 ++
file-web/src/main/resources/config/application.properties | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
index 8d9518d..0e996dd 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
@@ -239,6 +239,8 @@ public class AliyunOSSUploader extends Uploader {
getClient().abortMultipartUpload(abortMultipartUploadRequest);
}
+
+ @Override
protected synchronized String getTimeStampName(){
String timeStampName;
diff --git a/file-web/src/main/resources/config/application.properties b/file-web/src/main/resources/config/application.properties
index b798ae6..6306424 100644
--- a/file-web/src/main/resources/config/application.properties
+++ b/file-web/src/main/resources/config/application.properties
@@ -52,7 +52,7 @@ mybatis-plus.global-config.banner=false
qiwen-file.remote-login=false
qiwen-file.share-mode=false
#FastFDS
-qiwen-file.storage-type=FastFDS
+#qiwen-file.storage-type=FastFDS
#是否启用阿里云oss
qiwen-file.aliyun.oss.enabled=false
From e1abac566c9bcbbf735fee7b15b059938bbad0cc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Fri, 19 Mar 2021 10:52:07 +0800
Subject: [PATCH 07/14] =?UTF-8?q?=E8=A7=A3=E5=86=B3=E4=B8=8B=E8=BD=BD?=
=?UTF-8?q?=E6=96=87=E4=BB=B6=E5=90=8D=E4=B9=B1=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../qiwenshare/file/controller/FiletransferController.java | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index cca748c..b4725f1 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -140,6 +140,11 @@ public class FiletransferController {
UserFile userFile = userFileService.getById(downloadFileDTO.getUserFileId());
String fileName = userFile.getFileName() + "." + userFile.getExtendName();
+ try {
+ fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
byte[] buffer = new byte[1024];
From 48cdbb8e0ff3d7e91662295795ad533604207942 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com>
Date: Fri, 19 Mar 2021 23:10:45 +0800
Subject: [PATCH 08/14] =?UTF-8?q?fdfs=E4=B8=8A=E4=BC=A0=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../upload/product/FastDFSUploader.java | 76 ++++++-----------
.../controller/FiletransferController.java | 81 ++++++++++---------
2 files changed, 69 insertions(+), 88 deletions(-)
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
index 1558561..ff6e5a8 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
@@ -10,17 +10,16 @@ import com.qiwenshare.common.util.PathUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
-import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.*;
@Slf4j
public class FastDFSUploader extends Uploader {
+ public static Object lock = new Object();
AppendFileStorageClient defaultAppendFileStorageClient;
UploadFile uploadFile;
@@ -28,16 +27,12 @@ public class FastDFSUploader extends Uploader {
private static Map CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
private static Map UPLOADED_SIZE = new HashMap<>();
private static Map STORE_PATH = new HashMap<>();
- private static Map LOCK_MAP = new HashMap<>();
+ private static Map LOCK_MAP = new HashMap<>();
public FastDFSUploader() {
}
- public FastDFSUploader(UploadFile uploadFile) {
- this.uploadFile = uploadFile;
- }
-
public FastDFSUploader(UploadFile uploadFile, AppendFileStorageClient defaultAppendFileStorageClient) {
this.uploadFile = uploadFile;
this.defaultAppendFileStorageClient = defaultAppendFileStorageClient;
@@ -76,13 +71,17 @@ public class FastDFSUploader extends Uploader {
}
-
- private List doUpload(String savePath, Iterator iter){
+ private List doUpload(String savePath, Iterator iter) {
List saveUploadFileList = new ArrayList<>();
try {
MultipartFile multipartfile = this.request.getFile(iter.next());
+ synchronized (lock) {
+ if (LOCK_MAP.get(uploadFile.getIdentifier()) == null) {
+ LOCK_MAP.put(uploadFile.getIdentifier(), new Object());
+ }
+ }
uploadFileChunk(multipartfile);
String timeStampName = getTimeStampName();
@@ -100,11 +99,10 @@ public class FastDFSUploader extends Uploader {
File confFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + confFilePath);
-
boolean isComplete = checkUploadStatus(uploadFile, confFile);
if (isComplete) {
log.info("分片上传完成");
-
+ LOCK_MAP.remove(uploadFile.getIdentifier());
uploadFile.setUrl(STORE_PATH.get(uploadFile.getIdentifier()));
uploadFile.setSuccess(1);
uploadFile.setMessage("上传成功");
@@ -126,40 +124,23 @@ public class FastDFSUploader extends Uploader {
public void uploadFileChunk(MultipartFile multipartFile) {
- // 存储在fastdfs不带组的路径
-// String noGroupPath = "";
- log.info("当前文件的Md5:{}", uploadFile.getIdentifier());
+ synchronized (LOCK_MAP.get(uploadFile.getIdentifier())) {
+ // 存储在fastdfs不带组的路径
- // 真正的拥有者
- boolean currOwner = false;
-
- try {
-
- Boolean lock = LOCK_MAP.get(uploadFile.getIdentifier());
- if (lock != null && lock) {
- throw new UploadGeneralException("请求块锁失败");
- }
- LOCK_MAP.put(uploadFile.getIdentifier(), true);
- // 写入锁的当前拥有者
- currOwner = true;
-
- // redis中记录当前应该传第几块(从0开始)
- Integer currentChunkInRedis = CURRENT_UPLOAD_CHUNK_NUMBER.get(uploadFile.getIdentifier());
+ log.info("当前文件的Md5:{}", uploadFile.getIdentifier());
log.info("当前块的大小:{}", uploadFile.getCurrentChunkSize());
- if (currentChunkInRedis == null) {
- currentChunkInRedis = 1;
+ if (CURRENT_UPLOAD_CHUNK_NUMBER.get(uploadFile.getIdentifier()) == null) {
+ CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), 1);
}
- //此段代码保证顺序,如果满足条件则返回失败
- if (uploadFile.getChunkNumber() < currentChunkInRedis) {
- log.info("当前文件块已上传");
- throw new UploadGeneralException("当前文件块已上传");
-// return false;
- } else if (uploadFile.getChunkNumber() > currentChunkInRedis) {
- log.info("当前文件块需要等待上传,稍后请重试");
- throw new UploadGeneralException("当前文件块需要等待上传,稍后请重试");
-// return false;
+ while (uploadFile.getChunkNumber() != CURRENT_UPLOAD_CHUNK_NUMBER.get(uploadFile.getIdentifier())) {
+ try {
+ LOCK_MAP.get(uploadFile.getIdentifier()).wait();
+ } catch (InterruptedException e) {
+ log.error("--------InterruptedException-------");
+ e.printStackTrace();
+ }
}
log.info("***********开始上传第{}块**********", uploadFile.getChunkNumber());
@@ -180,13 +161,11 @@ public class FastDFSUploader extends Uploader {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.info("获取远程文件路径出错");
throw new UploadGeneralException("获取远程文件路径出错");
-// return false;
}
} catch (Exception e) {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.error("初次上传远程文件出错", e);
throw new UploadGeneralException("初次上传远程文件出错", e);
-// return false;
}
STORE_PATH.put(uploadFile.getIdentifier(), storePath.getPath());
@@ -199,7 +178,6 @@ public class FastDFSUploader extends Uploader {
log.error("无法获取已上传服务器文件地址");
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
throw new UploadGeneralException("无法获取已上传服务器文件地址");
-// return false;
}
try {
Long alreadySize = UPLOADED_SIZE.get(uploadFile.getIdentifier());
@@ -213,20 +191,16 @@ public class FastDFSUploader extends Uploader {
CURRENT_UPLOAD_CHUNK_NUMBER.put(uploadFile.getIdentifier(), uploadFile.getChunkNumber());
log.error("更新远程文件出错", e);
throw new UploadGeneralException("更新远程文件出错", e);
-// return false;
}
}
} catch (Exception e) {
log.error("上传文件错误", e);
throw new UploadGeneralException("上传文件错误", e);
-// return false;
- }
- } finally {
- // 锁的当前拥有者才能释放块上传锁
- if (currOwner) {
- LOCK_MAP.put(uploadFile.getIdentifier(), false);
}
+
+ log.info("***********第{}块上传成功**********", uploadFile.getChunkNumber());
+
+ LOCK_MAP.get(uploadFile.getIdentifier()).notifyAll();
}
- log.info("***********第{}块上传成功**********", uploadFile.getChunkNumber());
}
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index b4725f1..72838f3 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -136,7 +136,7 @@ public class FiletransferController {
@Operation(summary = "下载文件", description = "下载文件接口", tags = {"filetransfer"})
@MyLog(operation = "下载文件", module = CURRENT_MODULE)
@RequestMapping(value = "/downloadfile", method = RequestMethod.GET)
- public String downloadFile(HttpServletResponse response, DownloadFileDTO downloadFileDTO) {
+ public void downloadFile(HttpServletResponse response, DownloadFileDTO downloadFileDTO) {
UserFile userFile = userFileService.getById(downloadFileDTO.getUserFileId());
String fileName = userFile.getFileName() + "." + userFile.getExtendName();
@@ -148,23 +148,36 @@ public class FiletransferController {
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
byte[] buffer = new byte[1024];
- BufferedInputStream bis = null;
+
FileBean fileBean = fileService.getById(userFile.getFileId());
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
+ aliyunDownload(response, buffer, fileBean);
+ } else {
+ localFileDownload(response, buffer, fileBean);
+ }
+
+ }
+
+ private void localFileDownload(HttpServletResponse response, byte[] buffer, FileBean fileBean) {
+ BufferedInputStream bis = null;
+ //设置文件路径
+ File file = FileOperation.newFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
+ if (file.exists()) {
+
+
+ FileInputStream fis = null;
- AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
- OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
- OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), fileBean.getTimeStampName());
- InputStream inputStream = ossObject.getObjectContent();
try {
- bis = new BufferedInputStream(inputStream);
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
- } catch (IOException e) {
+
+ } catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
@@ -174,43 +187,37 @@ public class FiletransferController {
e.printStackTrace();
}
}
-
}
- ossClient.shutdown();
- } else {
- //设置文件路径
- File file = FileOperation.newFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
- if (file.exists()) {
-
-
- FileInputStream fis = null;
+ }
+ }
+ private void aliyunDownload(HttpServletResponse response, byte[] buffer, FileBean fileBean) {
+ BufferedInputStream bis = null;
+ AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
+ OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
+ OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), fileBean.getTimeStampName());
+ InputStream inputStream = ossObject.getObjectContent();
+ try {
+ bis = new BufferedInputStream(inputStream);
+ OutputStream os = response.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
try {
- fis = new FileInputStream(file);
- bis = new BufferedInputStream(fis);
- OutputStream os = response.getOutputStream();
- int i = bis.read(buffer);
- while (i != -1) {
- os.write(buffer, 0, i);
- i = bis.read(buffer);
- }
-
- } catch (Exception e) {
+ bis.close();
+ } catch (IOException e) {
e.printStackTrace();
- } finally {
- if (bis != null) {
- try {
- bis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
}
}
}
- return null;
-
+ ossClient.shutdown();
}
@Operation(summary = "获取存储信息", description = "获取存储信息", tags = {"filetransfer"})
From 98a4ebe8f1cd7d3b3014e960c7637d76dc1cecff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Sat, 20 Mar 2021 17:05:55 +0800
Subject: [PATCH 09/14] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
file-common/pom.xml | 7 +++
.../common/config/RedisAutoConfiguration.java | 37 +++++++++++++
file-web/pom.xml | 10 ++--
.../file/api/IElasticSearchService.java | 8 +++
.../qiwenshare/file/config/es/FileSearch.java | 49 +++++++++++++++++
.../file/controller/FileController.java | 52 +++++++++++++++++--
.../controller/FiletransferController.java | 46 ++++++++++++++--
.../file/controller/TaskController.java | 33 +++++++++++-
.../file/controller/UserController.java | 2 +-
.../com/qiwenshare/file/dto/RegisterDTO.java | 15 ------
.../dto/{ => file}/BatchDeleteFileDTO.java | 2 +-
.../file/dto/{ => file}/CreateFileDTO.java | 2 +-
.../file/dto/{ => file}/DeleteFileDTO.java | 2 +-
.../file/dto/{ => file}/RenameFileDTO.java | 2 +-
.../file/dto/file/SearchFileDTO.java | 12 +++++
.../file/dto/{ => file}/UnzipFileDTO.java | 2 +-
.../qiwenshare/file/dto/user/RegisterDTO.java | 11 +++-
.../resources/config/application.properties | 24 +++++++++
18 files changed, 279 insertions(+), 37 deletions(-)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/config/RedisAutoConfiguration.java
create mode 100644 file-web/src/main/java/com/qiwenshare/file/api/IElasticSearchService.java
create mode 100644 file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
delete mode 100644 file-web/src/main/java/com/qiwenshare/file/dto/RegisterDTO.java
rename file-web/src/main/java/com/qiwenshare/file/dto/{ => file}/BatchDeleteFileDTO.java (86%)
rename file-web/src/main/java/com/qiwenshare/file/dto/{ => file}/CreateFileDTO.java (88%)
rename file-web/src/main/java/com/qiwenshare/file/dto/{ => file}/DeleteFileDTO.java (92%)
rename file-web/src/main/java/com/qiwenshare/file/dto/{ => file}/RenameFileDTO.java (94%)
create mode 100644 file-web/src/main/java/com/qiwenshare/file/dto/file/SearchFileDTO.java
rename file-web/src/main/java/com/qiwenshare/file/dto/{ => file}/UnzipFileDTO.java (88%)
diff --git a/file-common/pom.xml b/file-common/pom.xml
index da8a36b..62f959d 100644
--- a/file-common/pom.xml
+++ b/file-common/pom.xml
@@ -50,6 +50,13 @@
1.26.2
+
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+
diff --git a/file-common/src/main/java/com/qiwenshare/common/config/RedisAutoConfiguration.java b/file-common/src/main/java/com/qiwenshare/common/config/RedisAutoConfiguration.java
new file mode 100644
index 0000000..bbdc78d
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/config/RedisAutoConfiguration.java
@@ -0,0 +1,37 @@
+package com.qiwenshare.common.config;
+
+
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.cache.interceptor.KeyGenerator;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableCaching
+public class RedisAutoConfiguration extends CachingConfigurerSupport {
+
+ @Bean
+ public KeyGenerator keyGenerator() {
+ return (target, method, params) -> {
+ StringBuilder sb = new StringBuilder();
+ sb.append(target.getClass().getName());
+ sb.append(method.getName());
+ for (Object obj : params) {
+ sb.append(obj.toString());
+ }
+ return sb.toString();
+ };
+ }
+
+// @Bean
+// public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
+// RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
+// .entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时
+// return RedisCacheManager
+// .builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
+// .cacheDefaults(redisCacheConfiguration).build();
+// }
+
+}
+
diff --git a/file-web/pom.xml b/file-web/pom.xml
index 5bb6d14..e5a8eba 100644
--- a/file-web/pom.xml
+++ b/file-web/pom.xml
@@ -73,12 +73,10 @@
4.13
test
-
-
-
-
-
-
+
+ org.springframework.boot
+ spring-boot-starter-data-elasticsearch
+
diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IElasticSearchService.java b/file-web/src/main/java/com/qiwenshare/file/api/IElasticSearchService.java
new file mode 100644
index 0000000..be6d57a
--- /dev/null
+++ b/file-web/src/main/java/com/qiwenshare/file/api/IElasticSearchService.java
@@ -0,0 +1,8 @@
+package com.qiwenshare.file.api;
+
+import com.qiwenshare.file.config.es.FileSearch;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+
+public interface IElasticSearchService extends ElasticsearchRepository {
+
+}
\ No newline at end of file
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java b/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
new file mode 100644
index 0000000..3560ed1
--- /dev/null
+++ b/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
@@ -0,0 +1,49 @@
+package com.qiwenshare.file.config.es;
+
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+@Data
+@Document(indexName = "filesearch", shards = 1, replicas = 0)
+public class FileSearch {
+
+ @Id
+ private long fileSearchId;
+ @Field(type = FieldType.Long)
+ private Long fileId;
+ @Field(type = FieldType.Text, analyzer = "ik_max_word")
+ private String fileName;
+ @Field(type = FieldType.Keyword)
+ private String timeStampName;
+ @Field(type = FieldType.Keyword)
+ private String fileUrl;
+ @Field(type = FieldType.Long)
+ private Long fileSize;
+ @Field(type = FieldType.Integer)
+ private Integer isOSS;
+ @Field(type = FieldType.Integer)
+ private Integer pointCount;
+ @Field(type = FieldType.Keyword)
+ private String identifier;
+ @Field(type = FieldType.Long)
+ private Long userFileId;
+ @Field(type = FieldType.Long)
+ private Long userId;
+ @Field(type = FieldType.Keyword)
+ private String filePath;
+ @Field(type = FieldType.Keyword)
+ private String extendName;
+ @Field(type = FieldType.Integer)
+ private Integer isDir;
+ @Field(type = FieldType.Keyword)
+ private String uploadTime;
+ @Field(type = FieldType.Integer)
+ private Integer deleteFlag;
+ @Field(type = FieldType.Keyword)
+ private String deleteTime;
+ @Field(type = FieldType.Keyword)
+ private String deleteBatchNum;
+}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
index e9b2397..9ce5644 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
@@ -1,6 +1,5 @@
package com.qiwenshare.file.controller;
-import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -16,13 +15,23 @@ import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.api.IUserService;
import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.file.config.es.FileSearch;
import com.qiwenshare.file.domain.*;
import com.qiwenshare.file.dto.*;
+import com.qiwenshare.file.dto.file.*;
import com.qiwenshare.file.vo.file.FileListVo;
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.elasticsearch.index.query.QueryBuilders;
+import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
+import org.springframework.data.elasticsearch.core.SearchHits;
+import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@@ -54,7 +63,8 @@ public class FileController {
public static final String CURRENT_MODULE = "文件接口";
-
+ @Autowired
+ private ElasticsearchRestTemplate elasticsearchRestTemplate;
public static long treeid = 0;
@@ -86,12 +96,48 @@ public class FileController {
return RestResult.success();
}
+ @Operation(summary = "文件搜索", description = "文件搜索", tags = {"file"})
+ @GetMapping(value = "/search")
+ @MyLog(operation = "文件搜索", module = CURRENT_MODULE)
+ @ResponseBody
+ public RestResult> searchFile(SearchFileDTO searchFileDTO) {
+ NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
+ HighlightBuilder.Field allHighLight = new HighlightBuilder.Field("*").preTags("")
+ .postTags("");
+
+ queryBuilder.withHighlightFields(allHighLight);
+
+ //设置分页
+ int currentPage = (int)searchFileDTO.getCurrentPage() - 1;
+ int pageCount = (int)(searchFileDTO.getPageCount() == 0 ? 10 : searchFileDTO.getPageCount());
+ String order = searchFileDTO.getOrder();
+ Sort.Direction direction = null;
+ if (searchFileDTO.getDirection() == null) {
+ direction = Sort.Direction.DESC;
+ } else if ("asc".equals(searchFileDTO.getDirection())) {
+ direction = Sort.Direction.ASC;
+ } else if ("desc".equals(searchFileDTO.getDirection())) {
+ direction = Sort.Direction.DESC;
+ } else {
+ direction = Sort.Direction.DESC;
+ }
+ if (order == null) {
+ queryBuilder.withPageable(PageRequest.of(currentPage, pageCount));
+ } else {
+ queryBuilder.withPageable(PageRequest.of(currentPage, pageCount, Sort.by(direction, order)));
+ }
+
+ queryBuilder.withQuery(QueryBuilders.matchQuery("fileName", searchFileDTO.getFileName()));
+ SearchHits search = elasticsearchRestTemplate.search(queryBuilder.build(), FileSearch.class);
+
+ return RestResult.success().data(search);
+ }
+
@Operation(summary = "文件重命名", description = "文件重命名", tags = {"file"})
@RequestMapping(value = "/renamefile", method = RequestMethod.POST)
@MyLog(operation = "文件重命名", module = CURRENT_MODULE)
@ResponseBody
public RestResult renameFile(@RequestBody RenameFileDTO renameFileDto, @RequestHeader("token") String token) {
- RestResult restResult = new RestResult<>();
if (!operationCheck(token).getSuccess()){
return operationCheck(token);
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index 72838f3..ee122ae 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -2,6 +2,9 @@ package com.qiwenshare.file.controller;
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
+import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
+import com.github.tobato.fastdfs.service.AppendFileStorageClient;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.qiwenshare.common.cbb.DateUtil;
import com.qiwenshare.common.operation.FileOperation;
import com.qiwenshare.common.oss.AliyunOSSDownload;
@@ -27,9 +30,11 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
+import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -53,6 +58,8 @@ public class FiletransferController {
IUserService userService;
@Resource
IUserFileService userFileService;
+ @Autowired
+ private FastFileStorageClient fastFileStorageClient;
public static final String CURRENT_MODULE = "文件传输接口";
@Operation(summary = "极速上传", description = "校验文件MD5判断文件是否存在,如果存在直接上传成功并返回skipUpload=true,如果不存在返回skipUpload=false需要再次调用该接口的POST方法", tags = {"filetransfer"})
@@ -147,19 +154,20 @@ public class FiletransferController {
}
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
- byte[] buffer = new byte[1024];
+
FileBean fileBean = fileService.getById(userFile.getFileId());
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
- aliyunDownload(response, buffer, fileBean);
+ aliyunDownload(response, fileBean);
} else {
- localFileDownload(response, buffer, fileBean);
+ localFileDownload(response, fileBean);
}
}
- private void localFileDownload(HttpServletResponse response, byte[] buffer, FileBean fileBean) {
+ private void localFileDownload(HttpServletResponse response, FileBean fileBean) {
BufferedInputStream bis = null;
+ byte[] buffer = new byte[1024];
//设置文件路径
File file = FileOperation.newFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
if (file.exists()) {
@@ -191,8 +199,9 @@ public class FiletransferController {
}
}
- private void aliyunDownload(HttpServletResponse response, byte[] buffer, FileBean fileBean) {
+ private void aliyunDownload(HttpServletResponse response, FileBean fileBean) {
BufferedInputStream bis = null;
+ byte[] buffer = new byte[1024];
AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), fileBean.getTimeStampName());
@@ -220,6 +229,33 @@ public class FiletransferController {
ossClient.shutdown();
}
+
+ public void fastFDSDownload(HttpServletResponse response, FileBean fileBean) throws IOException {
+ String group = fileBean.getFileUrl().substring(0, fileBean.getFileUrl().indexOf("/"));
+ String path = fileBean.getFileUrl().substring(fileBean.getFileUrl().indexOf("/") + 1);
+ DownloadByteArray downloadByteArray = new DownloadByteArray();
+ byte[] bytes = fastFileStorageClient.downloadFile(group, path, downloadByteArray);
+
+ // 这里只是为了整合fastdfs,所以写死了文件格式。需要在上传的时候保存文件名。下载的时候使用对应的格式
+ response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));
+ response.setCharacterEncoding("UTF-8");
+ ServletOutputStream outputStream = null;
+ try {
+ outputStream = response.getOutputStream();
+ outputStream.write(bytes);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ outputStream.flush();
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
@Operation(summary = "获取存储信息", description = "获取存储信息", tags = {"filetransfer"})
@RequestMapping(value = "/getstorage", method = RequestMethod.GET)
@ResponseBody
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
index 20e40c5..8c520d3 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/TaskController.java
@@ -1,13 +1,19 @@
package com.qiwenshare.file.controller;
+import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qiwenshare.file.api.IElasticSearchService;
+import com.qiwenshare.file.config.es.FileSearch;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.service.FileService;
import com.qiwenshare.file.service.UserFileService;
import com.qiwenshare.file.service.UserService;
+import com.qiwenshare.file.vo.file.FileListVo;
import lombok.extern.slf4j.Slf4j;
+import org.apache.catalina.User;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Controller;
@@ -22,6 +28,10 @@ public class TaskController {
@Resource
FileService fileService;
+ @Resource
+ UserFileService userFileService;
+ @Autowired
+ private IElasticSearchService elasticSearchService;
@Scheduled(cron = "0 0/1 * * * ?")
public void deleteFile() {
@@ -36,7 +46,28 @@ public class TaskController {
fileService.deleteLocalFile(fileBean);
fileService.removeById(fileBean.getFileId());
}
-// fileService.remove(fileBeanLambdaQueryWrapper);
}
+
+ @Scheduled(fixedRate = 1000 * 60 * 60 * 24)
+ public void updateElasticSearch() {
+
+ UserFile userFile = new UserFile();
+ try {
+ elasticSearchService.deleteAll();
+ } catch (Exception e) {
+ log.error("删除ES失败:" + e);
+ }
+ try {
+ List userfiles = userFileService.userFileList(userFile, 0L, 999999L);
+ for (FileListVo fileListVo : userfiles) {
+ log.info(JSON.toJSONString(fileListVo));
+ FileSearch fileSearch = new FileSearch();
+ BeanUtil.copyProperties(fileListVo, fileSearch);
+ elasticSearchService.save(fileSearch);
+ }
+ } catch (Exception e) {
+ log.error("更新ES失败:" + e);
+ }
+ }
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java b/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
index 85ad31c..028557a 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
@@ -9,7 +9,7 @@ import com.qiwenshare.file.anno.MyLog;
import com.qiwenshare.file.api.IUserService;
import com.qiwenshare.file.config.QiwenFileConfig;
import com.qiwenshare.file.domain.UserBean;
-import com.qiwenshare.file.dto.RegisterDTO;
+import com.qiwenshare.file.dto.user.RegisterDTO;
import com.qiwenshare.file.vo.user.UserLoginVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/RegisterDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/RegisterDTO.java
deleted file mode 100644
index 8a22de3..0000000
--- a/file-web/src/main/java/com/qiwenshare/file/dto/RegisterDTO.java
+++ /dev/null
@@ -1,15 +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 RegisterDTO {
- @Schema(description = "用户名")
- private String username;
- @Schema(description = "手机号")
- private String telephone;
- @Schema(description = "密码")
- private String password;
-}
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/BatchDeleteFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/BatchDeleteFileDTO.java
similarity index 86%
rename from file-web/src/main/java/com/qiwenshare/file/dto/BatchDeleteFileDTO.java
rename to file-web/src/main/java/com/qiwenshare/file/dto/file/BatchDeleteFileDTO.java
index 4b6fa51..79fde76 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/BatchDeleteFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/BatchDeleteFileDTO.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.dto;
+package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/CreateFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java
similarity index 88%
rename from file-web/src/main/java/com/qiwenshare/file/dto/CreateFileDTO.java
rename to file-web/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java
index 66fdc5a..f58128e 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/CreateFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/CreateFileDTO.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.dto;
+package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/DeleteFileDTO.java
similarity index 92%
rename from file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java
rename to file-web/src/main/java/com/qiwenshare/file/dto/file/DeleteFileDTO.java
index 40f61cd..14d9d0d 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/DeleteFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/DeleteFileDTO.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.dto;
+package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/RenameFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
similarity index 94%
rename from file-web/src/main/java/com/qiwenshare/file/dto/RenameFileDTO.java
rename to file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
index d54a257..a1b943e 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/RenameFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.dto;
+package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/file/SearchFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/SearchFileDTO.java
new file mode 100644
index 0000000..c403414
--- /dev/null
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/SearchFileDTO.java
@@ -0,0 +1,12 @@
+package com.qiwenshare.file.dto.file;
+
+import lombok.Data;
+
+@Data
+public class SearchFileDTO {
+ private String fileName;
+ private long currentPage;
+ private long pageCount;
+ private String order;
+ private String direction;
+}
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/UnzipFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java
similarity index 88%
rename from file-web/src/main/java/com/qiwenshare/file/dto/UnzipFileDTO.java
rename to file-web/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java
index 77062d8..8b05212 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/UnzipFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/UnzipFileDTO.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.dto;
+package com.qiwenshare.file.dto.file;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/user/RegisterDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/user/RegisterDTO.java
index f8fc045..7e72cf5 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/user/RegisterDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/user/RegisterDTO.java
@@ -1,6 +1,15 @@
package com.qiwenshare.file.dto.user;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+@Data
+@Schema(name = "用户注册DTO",required = true)
public class RegisterDTO {
-
+ @Schema(description = "用户名")
+ private String username;
+ @Schema(description = "手机号")
+ private String telephone;
+ @Schema(description = "密码")
+ private String password;
}
diff --git a/file-web/src/main/resources/config/application.properties b/file-web/src/main/resources/config/application.properties
index 6306424..9336bdf 100644
--- a/file-web/src/main/resources/config/application.properties
+++ b/file-web/src/main/resources/config/application.properties
@@ -71,3 +71,27 @@ fdfs.thumb-image.width=150
fdfs.thumb-image.height=150
fdfs.tracker-list=121.89.222.103:22122
+
+# Redis数据库索引(默认为0)
+spring.redis.database=0
+# Redis服务器地址
+spring.redis.host=123.56.9.174
+# Redis服务器连接端口
+spring.redis.port=6379
+# Redis服务器连接密码(默认为空)
+spring.redis.password=ma123456
+# 连接池最大连接数(使用负值表示没有限制) 默认 8
+spring.redis.lettuce.pool.max-active=8
+# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
+spring.redis.lettuce.pool.max-wait=10000
+# 连接池中的最大空闲连接 默认 8
+spring.redis.lettuce.pool.max-idle=30
+# 连接池中的最小空闲连接 默认 0
+spring.redis.lettuce.pool.min-idle=10
+#连接超时时间(毫秒)
+spring.redis.timeout=5000
+
+
+spring.data.elasticsearch.client.reactive.endpoints=127.0.0.1:9200
+spring.elasticsearch.rest.uris=127.0.0.1:9200
+
From 58373861e7bfa71ded54bbba28b78000dd897351 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?=
Date: Mon, 22 Mar 2021 20:53:22 +0800
Subject: [PATCH 10/14] =?UTF-8?q?=E5=BA=95=E5=B1=82=E4=BB=A3=E7=A0=81?=
=?UTF-8?q?=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../qiwenshare/common/domain/UploadFile.java | 2 +
.../common/download/Downloader.java | 10 +
.../download/product/AliyunOSSDownloader.java | 12 +
.../download/product/ChunkDownloader.java | 12 +
.../download/product/FastDFSDownloader.java | 12 +
.../qiwenshare/common/upload/Uploader.java | 4 +-
.../factory/AliyunOSSUploaderFactory.java | 13 +-
.../upload/factory/ChunkUploaderFactory.java | 12 +-
.../factory/FastDFSUploaderFactory.java | 14 +-
.../upload/factory/NormalUploaderFactory.java | 48 ++--
.../upload/factory/UploaderFactory.java | 2 +-
.../upload/product/AliyunOSSUploader.java | 49 ++--
.../common/upload/product/ChunkUploader.java | 28 +-
.../upload/product/FastDFSUploader.java | 41 +--
.../common/upload/product/NormalUploader.java | 271 +++++++++---------
.../com/qiwenshare/common/util/RedisUtil.java | 79 +++++
.../qiwenshare/file/config/es/FileSearch.java | 3 +
.../file/controller/FileController.java | 19 +-
.../controller/FiletransferController.java | 14 +-
.../com/qiwenshare/file/domain/FileBean.java | 4 +
.../file/dto/file/RenameFileDTO.java | 4 +
.../qiwenshare/file/service/FileService.java | 14 +
.../file/service/FiletransferService.java | 10 +-
.../file/service/UserFileService.java | 92 +++---
.../qiwenshare/file/vo/file/FileListVo.java | 3 +
.../file/vo/share/ShareFileListVO.java | 3 +
26 files changed, 477 insertions(+), 298 deletions(-)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/util/RedisUtil.java
diff --git a/file-common/src/main/java/com/qiwenshare/common/domain/UploadFile.java b/file-common/src/main/java/com/qiwenshare/common/domain/UploadFile.java
index 47087b6..faba858 100644
--- a/file-common/src/main/java/com/qiwenshare/common/domain/UploadFile.java
+++ b/file-common/src/main/java/com/qiwenshare/common/domain/UploadFile.java
@@ -11,7 +11,9 @@ public class UploadFile {
private int success;
private String message;
private String url;
+ @Deprecated
private Integer isOSS;
+ private Integer storageType;
//切片上传相关参数
private String taskId;
private int chunkNumber;
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java b/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
new file mode 100644
index 0000000..5b244a5
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
@@ -0,0 +1,10 @@
+package com.qiwenshare.common.download;
+
+import com.qiwenshare.common.domain.UploadFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+public abstract class Downloader {
+ public abstract void download(HttpServletResponse httpServletResponse);
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
new file mode 100644
index 0000000..d0b1c75
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
@@ -0,0 +1,12 @@
+package com.qiwenshare.common.download.product;
+
+import com.qiwenshare.common.download.Downloader;
+
+import javax.servlet.http.HttpServletResponse;
+
+public class AliyunOSSDownloader extends Downloader {
+ @Override
+ public void download(HttpServletResponse httpServletResponse) {
+
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
new file mode 100644
index 0000000..ee454b2
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
@@ -0,0 +1,12 @@
+package com.qiwenshare.common.download.product;
+
+import com.qiwenshare.common.download.Downloader;
+
+import javax.servlet.http.HttpServletResponse;
+
+public class ChunkDownloader extends Downloader {
+ @Override
+ public void download(HttpServletResponse httpServletResponse) {
+
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
new file mode 100644
index 0000000..d01f776
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
@@ -0,0 +1,12 @@
+package com.qiwenshare.common.download.product;
+
+import com.qiwenshare.common.download.Downloader;
+
+import javax.servlet.http.HttpServletResponse;
+
+public class FastDFSDownloader extends Downloader {
+ @Override
+ public void download(HttpServletResponse httpServletResponse) {
+
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
index b9615a0..eafdd13 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/Uploader.java
@@ -24,9 +24,9 @@ public abstract class Uploader {
// 文件大小限制,单位KB
public final int maxSize = 10000000;
- protected StandardMultipartHttpServletRequest request = null;
+// protected StandardMultipartHttpServletRequest request = null;
- public abstract List upload(HttpServletRequest request);
+ public abstract List upload(HttpServletRequest request, UploadFile uploadFile);
/**
* 根据字符串创建本地目录 并按照日期建立子目录返回
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
index 2661666..a238ac4 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
@@ -11,15 +11,16 @@ import javax.annotation.Resource;
@Component
public class AliyunOSSUploaderFactory implements UploaderFactory {
-
+ @Resource
+ AliyunOSSUploader aliyunOSSUploader;
@Override
public Uploader getUploader() {
- return new AliyunOSSUploader();
+ return aliyunOSSUploader;
}
- @Override
- public Uploader getUploader(UploadFile uploadFile) {
- return new AliyunOSSUploader(uploadFile);
- }
+// @Override
+// public Uploader getUploader(UploadFile uploadFile) {
+// return new AliyunOSSUploader(uploadFile);
+// }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
index 830104a..cdb3303 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
@@ -11,15 +11,17 @@ import javax.annotation.Resource;
@Component
public class ChunkUploaderFactory implements UploaderFactory {
+ @Resource
+ ChunkUploader ChunkUploader;
@Override
public Uploader getUploader() {
- return new ChunkUploader();
+ return ChunkUploader;
}
- @Override
- public Uploader getUploader(UploadFile uploadFile) {
- return new ChunkUploader(uploadFile);
- }
+// @Override
+// public Uploader getUploader(UploadFile uploadFile) {
+// return new ChunkUploader(uploadFile);
+// }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
index 5e6a80f..c030695 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
@@ -11,16 +11,18 @@ import javax.annotation.Resource;
@Component
public class FastDFSUploaderFactory implements UploaderFactory {
+// @Resource
+// AppendFileStorageClient defaultAppendFileStorageClient;
@Resource
- AppendFileStorageClient defaultAppendFileStorageClient;
+ FastDFSUploader fastDFSUploader;
@Override
public Uploader getUploader() {
- return new FastDFSUploader();
+ return fastDFSUploader;
}
- @Override
- public Uploader getUploader(UploadFile uploadFile) {
- return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
- }
+// @Override
+// public Uploader getUploader(UploadFile uploadFile) {
+// return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
+// }
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
index 145dfa7..1bde493 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
@@ -1,24 +1,24 @@
-package com.qiwenshare.common.upload.factory;
-
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
-import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.upload.product.NormalUploader;
-import com.qiwenshare.common.upload.Uploader;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-@Component
-public class NormalUploaderFactory implements UploaderFactory {
-
- @Override
- public Uploader getUploader() {
- return new NormalUploader();
- }
-
- @Override
- public Uploader getUploader(UploadFile uploadFile) {
- return new NormalUploader();
- }
-
-}
+//package com.qiwenshare.common.upload.factory;
+//
+//import com.github.tobato.fastdfs.service.AppendFileStorageClient;
+//import com.qiwenshare.common.domain.UploadFile;
+//import com.qiwenshare.common.upload.product.NormalUploader;
+//import com.qiwenshare.common.upload.Uploader;
+//import org.springframework.stereotype.Component;
+//
+//import javax.annotation.Resource;
+//
+//@Component
+//public class NormalUploaderFactory implements UploaderFactory {
+//
+// @Override
+// public Uploader getUploader() {
+// return new NormalUploader();
+// }
+//
+// @Override
+// public Uploader getUploader(UploadFile uploadFile) {
+// return new NormalUploader();
+// }
+//
+//}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
index 99a4793..df1272f 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
@@ -6,5 +6,5 @@ import com.qiwenshare.common.upload.Uploader;
public interface UploaderFactory {
Uploader getUploader();
- Uploader getUploader(UploadFile uploadFile);
+// Uploader getUploader(UploadFile uploadFile);
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
index 0e996dd..d6e3188 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
@@ -16,6 +16,7 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
@@ -24,11 +25,11 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
-
+@Component
public class AliyunOSSUploader extends Uploader {
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
- private UploadFile uploadFile;
+// private UploadFile uploadFile;
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
@@ -46,23 +47,23 @@ public class AliyunOSSUploader extends Uploader {
}
- public AliyunOSSUploader(UploadFile uploadFile) {
- this.uploadFile = uploadFile;
- }
+// public AliyunOSSUploader(UploadFile uploadFile) {
+// this.uploadFile = uploadFile;
+// }
@Override
- public List upload(HttpServletRequest httpServletRequest) {
+ public List upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
logger.info("开始上传upload");
List saveUploadFileList = new ArrayList<>();
- this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
+ StandardMultipartHttpServletRequest request = (StandardMultipartHttpServletRequest) httpServletRequest;
AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
endpoint = aliyunOSS.getEndpoint();
accessKeyId = aliyunOSS.getAccessKeyId();
accessKeySecret = aliyunOSS.getAccessKeySecret();
bucketName = aliyunOSS.getBucketName();
- boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
+ boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
// UploadFile uploadFile = new UploadFile();
@@ -78,10 +79,10 @@ public class AliyunOSSUploader extends Uploader {
ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
sfu.setSizeMax(this.maxSize * 1024L);
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
- Iterator iter = this.request.getFileNames();
+ Iterator iter = request.getFileNames();
while (iter.hasNext()) {
- saveUploadFileList = doUpload(savePath, iter);
+ saveUploadFileList = doUpload(request, savePath, iter, uploadFile);
}
@@ -89,13 +90,13 @@ public class AliyunOSSUploader extends Uploader {
return saveUploadFileList;
}
- private List doUpload(String savePath, Iterator iter) {
- OSS ossClient = getClient();
+ private List doUpload(StandardMultipartHttpServletRequest standardMultipartHttpServletRequest, String savePath, Iterator iter, UploadFile uploadFile) {
+ OSS ossClient = getClient(uploadFile);
List saveUploadFileList = new ArrayList<>();
try {
- MultipartFile multipartfile = this.request.getFile(iter.next());
+ MultipartFile multipartfile = standardMultipartHttpServletRequest.getFile(iter.next());
String timeStampName = getTimeStampName();
String originalName = multipartfile.getOriginalFilename();
@@ -157,7 +158,7 @@ public class AliyunOSSUploader extends Uploader {
boolean isComplete = checkUploadStatus(uploadFile, confFile);
if (isComplete) {
logger.info("分片上传完成");
- completeMultipartUpload();
+ completeMultipartUpload(uploadFile);
uploadFile.setUrl(ossFilePath);
uploadFile.setSuccess(1);
@@ -173,6 +174,7 @@ public class AliyunOSSUploader extends Uploader {
}
uploadFile.setIsOSS(1);
+ uploadFile.setStorageType(1);
uploadFile.setFileSize(uploadFile.getTotalSize());
saveUploadFileList.add(uploadFile);
@@ -182,7 +184,7 @@ public class AliyunOSSUploader extends Uploader {
/**
* 将文件分块进行升序排序并执行文件上传。
*/
- protected void completeMultipartUpload() {
+ protected void completeMultipartUpload(UploadFile uploadFile) {
List partETags = partETagsMap.get(uploadFile.getIdentifier());
Collections.sort(partETags, Comparator.comparingInt(PartETag::getPartNumber));
@@ -194,16 +196,16 @@ public class AliyunOSSUploader extends Uploader {
partETags);
logger.info("----:" + JSON.toJSONString(partETags));
// 完成上传。
- CompleteMultipartUploadResult completeMultipartUploadResult = getClient().completeMultipartUpload(completeMultipartUploadRequest);
+ CompleteMultipartUploadResult completeMultipartUploadResult = getClient(uploadFile).completeMultipartUpload(completeMultipartUploadRequest);
logger.info("----:" + JSON.toJSONString(completeMultipartUploadRequest));
- getClient().shutdown();
+ getClient(uploadFile).shutdown();
partETagsMap.remove(uploadFile.getIdentifier());
uploadPartRequestMap.remove(uploadFile.getIdentifier());
ossMap.remove(uploadFile.getIdentifier());
//
}
- private void listFile() {
+ private void listFile(UploadFile uploadFile) {
// 列举已上传的分片,其中uploadId来自于InitiateMultipartUpload返回的结果。
ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
// 设置uploadId。
@@ -212,7 +214,7 @@ public class AliyunOSSUploader extends Uploader {
listPartsRequest.setMaxParts(100);
// 指定List的起始位置。只有分片号大于此参数值的分片会被列举。
// listPartsRequest.setPartNumberMarker(1);
- PartListing partListing = getClient().listParts(listPartsRequest);
+ PartListing partListing = getClient(uploadFile).listParts(listPartsRequest);
for (PartSummary part : partListing.getParts()) {
logger.info("分片号:"+part.getPartNumber() + ", 分片数据大小: "+
@@ -233,15 +235,14 @@ public class AliyunOSSUploader extends Uploader {
/**
* 取消上传
*/
- private void cancelUpload() {
+ private void cancelUpload(UploadFile uploadFile) {
AbortMultipartUploadRequest abortMultipartUploadRequest =
new AbortMultipartUploadRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
- getClient().abortMultipartUpload(abortMultipartUploadRequest);
+ getClient(uploadFile).abortMultipartUpload(abortMultipartUploadRequest);
}
- @Override
- protected synchronized String getTimeStampName(){
+ protected synchronized String getTimeStampName(UploadFile uploadFile){
String timeStampName;
if (StringUtils.isEmpty(timeStampNameMap.get(uploadFile.getIdentifier()))) {
@@ -253,7 +254,7 @@ public class AliyunOSSUploader extends Uploader {
return timeStampName;
}
- private synchronized OSS getClient() {
+ private synchronized OSS getClient(UploadFile uploadFile) {
OSS ossClient = null;
if (ossMap.get(uploadFile.getIdentifier()) == null) {
ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
index d9e0afe..6acb4ba 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
@@ -13,6 +13,7 @@ import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
@@ -24,24 +25,24 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
-
+@Component
public class ChunkUploader extends Uploader {
private static final Logger logger = LoggerFactory.getLogger(ChunkUploader.class);
- private UploadFile uploadFile;
+// private UploadFile uploadFile;
public ChunkUploader() {
}
-
- public ChunkUploader(UploadFile uploadFile) {
- this.uploadFile = uploadFile;
- }
+//
+// public ChunkUploader(UploadFile uploadFile) {
+// this.uploadFile = uploadFile;
+// }
@Override
- public List upload(HttpServletRequest httpServletRequest) {
+ public List upload(HttpServletRequest httpServletRequest,UploadFile uploadFile) {
List saveUploadFileList = new ArrayList();
- this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
- boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
+ StandardMultipartHttpServletRequest standardMultipartHttpServletRequest = (StandardMultipartHttpServletRequest) httpServletRequest;
+ boolean isMultipart = ServletFileUpload.isMultipartContent(standardMultipartHttpServletRequest);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
}
@@ -53,9 +54,9 @@ public class ChunkUploader extends Uploader {
ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
sfu.setSizeMax(this.maxSize * 1024L);
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
- Iterator iter = this.request.getFileNames();
+ Iterator iter = standardMultipartHttpServletRequest.getFileNames();
while (iter.hasNext()) {
- saveUploadFileList = doUpload(savePath, iter);
+ saveUploadFileList = doUpload(standardMultipartHttpServletRequest, savePath, iter, uploadFile);
}
} catch (IOException e) {
throw new UploadGeneralException("未包含文件上传域");
@@ -65,9 +66,9 @@ public class ChunkUploader extends Uploader {
return saveUploadFileList;
}
- private List doUpload(String savePath, Iterator iter) throws IOException, NotSameFileExpection {
+ private List doUpload(StandardMultipartHttpServletRequest standardMultipartHttpServletRequest, String savePath, Iterator iter, UploadFile uploadFile) throws IOException, NotSameFileExpection {
List saveUploadFileList = new ArrayList();
- MultipartFile multipartfile = this.request.getFile(iter.next());
+ MultipartFile multipartfile = standardMultipartHttpServletRequest.getFile(iter.next());
String timeStampName = uploadFile.getIdentifier();
@@ -88,6 +89,7 @@ public class ChunkUploader extends Uploader {
File minFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + minFilePath);
File confFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + confFilePath);
uploadFile.setIsOSS(0);
+ uploadFile.setStorageType(0);
uploadFile.setUrl(saveFilePath);
if (StringUtils.isEmpty(uploadFile.getTaskId())) {// == null || "".equals(uploadFile.getTaskId())) {
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
index ff6e5a8..f540628 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/FastDFSUploader.java
@@ -10,19 +10,22 @@ import com.qiwenshare.common.util.PathUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
+import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.*;
-
+@Component
@Slf4j
public class FastDFSUploader extends Uploader {
public static Object lock = new Object();
+ @Resource
AppendFileStorageClient defaultAppendFileStorageClient;
- UploadFile uploadFile;
+// UploadFile uploadFile;
private static Map CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
private static Map UPLOADED_SIZE = new HashMap<>();
@@ -33,20 +36,24 @@ public class FastDFSUploader extends Uploader {
}
- public FastDFSUploader(UploadFile uploadFile, AppendFileStorageClient defaultAppendFileStorageClient) {
- this.uploadFile = uploadFile;
- this.defaultAppendFileStorageClient = defaultAppendFileStorageClient;
- }
+// public FastDFSUploader(UploadFile uploadFile) {
+// this.uploadFile = uploadFile;
+// }
+//
+// public FastDFSUploader(UploadFile uploadFile, AppendFileStorageClient defaultAppendFileStorageClient) {
+//// this.uploadFile = uploadFile;
+// this.defaultAppendFileStorageClient = defaultAppendFileStorageClient;
+// }
@Override
- public List upload(HttpServletRequest request) {
+ public List upload(HttpServletRequest request, UploadFile uploadFile) {
log.info("开始上传upload");
List saveUploadFileList = new ArrayList<>();
- this.request = (StandardMultipartHttpServletRequest) request;
+ StandardMultipartHttpServletRequest standardMultipartHttpServletRequest = (StandardMultipartHttpServletRequest) request;
- boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
+ boolean isMultipart = ServletFileUpload.isMultipartContent(standardMultipartHttpServletRequest);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
}
@@ -58,9 +65,9 @@ public class FastDFSUploader extends Uploader {
ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
sfu.setSizeMax(this.maxSize * 1024L);
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
- Iterator iter = this.request.getFileNames();
+ Iterator iter = standardMultipartHttpServletRequest.getFileNames();
while (iter.hasNext()) {
- saveUploadFileList = doUpload(savePath, iter);
+ saveUploadFileList = doUpload(standardMultipartHttpServletRequest, savePath, iter, uploadFile);
}
} catch (Exception e) {
throw new UploadGeneralException(e);
@@ -71,18 +78,18 @@ public class FastDFSUploader extends Uploader {
}
- private List doUpload(String savePath, Iterator iter) {
+ private List doUpload(StandardMultipartHttpServletRequest standardMultipartHttpServletRequest, String savePath, Iterator iter, UploadFile uploadFile) {
List saveUploadFileList = new ArrayList<>();
try {
- MultipartFile multipartfile = this.request.getFile(iter.next());
+ MultipartFile multipartfile = standardMultipartHttpServletRequest.getFile(iter.next());
synchronized (lock) {
if (LOCK_MAP.get(uploadFile.getIdentifier()) == null) {
LOCK_MAP.put(uploadFile.getIdentifier(), new Object());
}
}
- uploadFileChunk(multipartfile);
+ uploadFileChunk(multipartfile, uploadFile);
String timeStampName = getTimeStampName();
String originalName = multipartfile.getOriginalFilename();
@@ -115,14 +122,14 @@ public class FastDFSUploader extends Uploader {
throw new UploadGeneralException(e);
}
- uploadFile.setIsOSS(1);
-
+ uploadFile.setIsOSS(0);
+ uploadFile.setStorageType(2);
uploadFile.setFileSize(uploadFile.getTotalSize());
saveUploadFileList.add(uploadFile);
return saveUploadFileList;
}
- public void uploadFileChunk(MultipartFile multipartFile) {
+ public void uploadFileChunk(MultipartFile multipartFile, UploadFile uploadFile) {
synchronized (LOCK_MAP.get(uploadFile.getIdentifier())) {
// 存储在fastdfs不带组的路径
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
index b882b0e..c89c2ad 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/NormalUploader.java
@@ -1,135 +1,136 @@
-package com.qiwenshare.common.upload.product;
-
-import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.operation.ImageOperation;
-import com.qiwenshare.common.upload.Uploader;
-import com.qiwenshare.common.util.FileUtil;
-import com.qiwenshare.common.util.PathUtil;
-import org.apache.commons.fileupload.disk.DiskFileItemFactory;
-import org.apache.commons.fileupload.servlet.ServletFileUpload;
-import org.apache.commons.fileupload.util.Streams;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-public class NormalUploader extends Uploader {
- private static final Logger logger = LoggerFactory.getLogger(NormalUploader.class);
-
- @Override
- public List upload(HttpServletRequest httpServletRequest) {
- List saveUploadFileList = new ArrayList();
- this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
- boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
- if (!isMultipart) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(0);
- uploadFile.setMessage("未包含文件上传域");
- saveUploadFileList.add(uploadFile);
- return saveUploadFileList;
- }
- DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
- String savePath = getSaveFilePath();
- dff.setRepository(new File(savePath));
-
- try {
- ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
- sfu.setSizeMax(this.maxSize * 1024L);
- sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
- Iterator iter = this.request.getFileNames();
- while (iter.hasNext()) {
- saveUploadFileList = doUpload(savePath, iter);
- }
- } catch (IOException e) {
- UploadFile uploadFile = new UploadFile();
- uploadFile.setSuccess(1);
- uploadFile.setMessage("未知错误");
- saveUploadFileList.add(uploadFile);
- e.printStackTrace();
- }
-
- return saveUploadFileList;
- }
-
- private List doUpload(String savePath, Iterator iter) throws IOException {
- List saveUploadFileList = new ArrayList();
- UploadFile uploadFile = new UploadFile();
- MultipartFile multipartfile = this.request.getFile(iter.next());
-
- InputStream inputStream = multipartfile.getInputStream();
- String timeStampName = getTimeStampName();
-
-
- String originalName = multipartfile.getOriginalFilename();
-
- String fileName = getFileName(originalName);
-
- String fileType = FileUtil.getFileExtendName(originalName);
- uploadFile.setFileName(fileName);
- uploadFile.setFileType(fileType);
- uploadFile.setTimeStampName(timeStampName);
-
- String saveFilePath = savePath + FILE_SEPARATOR + timeStampName;
- String minFilePath = savePath + FILE_SEPARATOR + timeStampName;
- if (StringUtils.isNotEmpty(fileType)) {
- saveFilePath += "." + fileType;
- minFilePath += "_min" + "." + fileType;
- }
-
- File file = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + saveFilePath);
- File minFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + minFilePath);
-
- uploadFile.setIsOSS(0);
- uploadFile.setUrl(saveFilePath);
- BufferedInputStream in = null;
- FileOutputStream out = null;
- BufferedOutputStream output = null;
-
- try {
- in = new BufferedInputStream(inputStream);
- out = new FileOutputStream(file);
- output = new BufferedOutputStream(out);
- Streams.copy(in, output, true);
- if (FileUtil.isImageFile(uploadFile.getFileType())){
- ImageOperation.thumbnailsImage(file, minFile, 300);
- }
-
- } catch (FileNotFoundException e) {
- logger.error("文件没有发现" + e);
- } catch (IOException e) {
- logger.error("文件读取失败" + e);
- } finally {
-
- closeStream(in, out, output);
- }
-
-
-
- uploadFile.setSuccess(1);
- uploadFile.setMessage("上传成功");
- uploadFile.setFileSize(request.getContentLengthLong());
- saveUploadFileList.add(uploadFile);
- return saveUploadFileList;
- }
-
-
- private void closeStream(BufferedInputStream in, FileOutputStream out,
- BufferedOutputStream output) throws IOException {
- if (in != null) {
- in.close();
- }
- if (out != null) {
- out.close();
- }
- if (output != null) {
- output.close();
- }
- }
-}
+//package com.qiwenshare.common.upload.product;
+//
+//import com.qiwenshare.common.domain.UploadFile;
+//import com.qiwenshare.common.operation.ImageOperation;
+//import com.qiwenshare.common.upload.Uploader;
+//import com.qiwenshare.common.util.FileUtil;
+//import com.qiwenshare.common.util.PathUtil;
+//import org.apache.commons.fileupload.disk.DiskFileItemFactory;
+//import org.apache.commons.fileupload.servlet.ServletFileUpload;
+//import org.apache.commons.fileupload.util.Streams;
+//import org.apache.commons.lang3.StringUtils;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.web.multipart.MultipartFile;
+//import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import java.io.*;
+//import java.util.ArrayList;
+//import java.util.Iterator;
+//import java.util.List;
+//
+//public class NormalUploader extends Uploader {
+// private static final Logger logger = LoggerFactory.getLogger(NormalUploader.class);
+//
+// @Override
+// public List upload(HttpServletRequest httpServletRequest) {
+// List saveUploadFileList = new ArrayList();
+// this.request = (StandardMultipartHttpServletRequest) httpServletRequest;
+// boolean isMultipart = ServletFileUpload.isMultipartContent(this.request);
+// if (!isMultipart) {
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(0);
+// uploadFile.setMessage("未包含文件上传域");
+// saveUploadFileList.add(uploadFile);
+// return saveUploadFileList;
+// }
+// DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
+// String savePath = getSaveFilePath();
+// dff.setRepository(new File(savePath));
+//
+// try {
+// ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
+// sfu.setSizeMax(this.maxSize * 1024L);
+// sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
+// Iterator iter = this.request.getFileNames();
+// while (iter.hasNext()) {
+// saveUploadFileList = doUpload(savePath, iter);
+// }
+// } catch (IOException e) {
+// UploadFile uploadFile = new UploadFile();
+// uploadFile.setSuccess(1);
+// uploadFile.setMessage("未知错误");
+// saveUploadFileList.add(uploadFile);
+// e.printStackTrace();
+// }
+//
+// return saveUploadFileList;
+// }
+//
+// private List doUpload(String savePath, Iterator iter) throws IOException {
+// List saveUploadFileList = new ArrayList();
+// UploadFile uploadFile = new UploadFile();
+// MultipartFile multipartfile = this.request.getFile(iter.next());
+//
+// InputStream inputStream = multipartfile.getInputStream();
+// String timeStampName = getTimeStampName();
+//
+//
+// String originalName = multipartfile.getOriginalFilename();
+//
+// String fileName = getFileName(originalName);
+//
+// String fileType = FileUtil.getFileExtendName(originalName);
+// uploadFile.setFileName(fileName);
+// uploadFile.setFileType(fileType);
+// uploadFile.setTimeStampName(timeStampName);
+//
+// String saveFilePath = savePath + FILE_SEPARATOR + timeStampName;
+// String minFilePath = savePath + FILE_SEPARATOR + timeStampName;
+// if (StringUtils.isNotEmpty(fileType)) {
+// saveFilePath += "." + fileType;
+// minFilePath += "_min" + "." + fileType;
+// }
+//
+// File file = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + saveFilePath);
+// File minFile = new File(PathUtil.getStaticPath() + FILE_SEPARATOR + minFilePath);
+//
+// uploadFile.setIsOSS(0);
+// uploadFile.setStorageType(0);
+// uploadFile.setUrl(saveFilePath);
+// BufferedInputStream in = null;
+// FileOutputStream out = null;
+// BufferedOutputStream output = null;
+//
+// try {
+// in = new BufferedInputStream(inputStream);
+// out = new FileOutputStream(file);
+// output = new BufferedOutputStream(out);
+// Streams.copy(in, output, true);
+// if (FileUtil.isImageFile(uploadFile.getFileType())){
+// ImageOperation.thumbnailsImage(file, minFile, 300);
+// }
+//
+// } catch (FileNotFoundException e) {
+// logger.error("文件没有发现" + e);
+// } catch (IOException e) {
+// logger.error("文件读取失败" + e);
+// } finally {
+//
+// closeStream(in, out, output);
+// }
+//
+//
+//
+// uploadFile.setSuccess(1);
+// uploadFile.setMessage("上传成功");
+// uploadFile.setFileSize(request.getContentLengthLong());
+// saveUploadFileList.add(uploadFile);
+// return saveUploadFileList;
+// }
+//
+//
+// private void closeStream(BufferedInputStream in, FileOutputStream out,
+// BufferedOutputStream output) throws IOException {
+// if (in != null) {
+// in.close();
+// }
+// if (out != null) {
+// out.close();
+// }
+// if (output != null) {
+// output.close();
+// }
+// }
+//}
diff --git a/file-common/src/main/java/com/qiwenshare/common/util/RedisUtil.java b/file-common/src/main/java/com/qiwenshare/common/util/RedisUtil.java
new file mode 100644
index 0000000..a6062d4
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/util/RedisUtil.java
@@ -0,0 +1,79 @@
+package com.qiwenshare.common.util;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.core.RedisOperations;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.SessionCallback;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Component
+@Slf4j
+public class RedisUtil {
+
+ @Resource
+ RedisTemplate redisTemplate;
+
+ /**
+ * 将值放入缓存
+ */
+ public void set(String key, Object value) {
+ redisTemplate.opsForValue().set(key, value);
+ }
+
+ /**
+ * 字符串:取对象
+ */
+ public T getObject(String key) {
+ Object o = redisTemplate.opsForValue().get(key);
+ if (o != null) {
+ return (T) o;
+ }
+ return null;
+ }
+
+ /**
+ * 将值放入缓存并设置时间-秒
+ */
+ public void set(String key, Object value, long time) {
+ if (time > 0) {
+ redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+ } else {
+ redisTemplate.opsForValue().set(key, value);
+ }
+ }
+
+ /**
+ * 删除key
+ */
+ public void deleteKey(String key) {
+ redisTemplate.delete(key);
+ }
+
+ /**
+ * 创建锁
+ * @param key 锁的Key
+ * @param value 值(随便写毫无意义)
+ * @param releaseTime 锁过期时间 防止死锁
+ * @return boolean
+ */
+ public boolean lock(String key, int value, long releaseTime) {
+ // 尝试获取锁
+ Boolean boo = redisTemplate.opsForValue().setIfAbsent(key, value, releaseTime, TimeUnit.SECONDS);
+ // 判断结果
+ return boo != null && boo;
+ }
+
+
+ /**
+ * 根据key删除锁
+ */
+ public void deleteLock(String key) {
+ // 删除key即可释放锁
+ deleteKey(key);
+ }
+}
\ No newline at end of file
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java b/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
index 3560ed1..a2eb8c7 100644
--- a/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
+++ b/file-web/src/main/java/com/qiwenshare/file/config/es/FileSearch.java
@@ -23,8 +23,11 @@ public class FileSearch {
@Field(type = FieldType.Long)
private Long fileSize;
@Field(type = FieldType.Integer)
+ @Deprecated
private Integer isOSS;
@Field(type = FieldType.Integer)
+ private Integer storageType;
+ @Field(type = FieldType.Integer)
private Integer pointCount;
@Field(type = FieldType.Keyword)
private String identifier;
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
index 9ce5644..096ae22 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
@@ -142,27 +142,29 @@ public class FileController {
return operationCheck(token);
}
UserBean sessionUserBean = userService.getUserBeanByToken(token);
+ UserFile userFile = userFileService.getById(renameFileDto.getUserFileId());
List userFiles = userFileService.selectUserFileByNameAndPath(renameFileDto.getFileName(), renameFileDto.getFilePath(), sessionUserBean.getUserId());
if (userFiles != null && !userFiles.isEmpty()) {
return RestResult.fail().message("同名文件已存在");
}
- if (1 == renameFileDto.getIsDir()) {
+ if (1 == userFile.getIsDir()) {
LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
lambdaUpdateWrapper.set(UserFile::getFileName, renameFileDto.getFileName())
.set(UserFile::getUploadTime, DateUtil.getCurrentTime())
.eq(UserFile::getUserFileId, renameFileDto.getUserFileId());
userFileService.update(lambdaUpdateWrapper);
- userFileService.replaceUserFilePath(renameFileDto.getFilePath() + renameFileDto.getFileName() + "/",
- renameFileDto.getFilePath() + renameFileDto.getOldFileName() + "/", sessionUserBean.getUserId());
+ userFileService.replaceUserFilePath(userFile.getFilePath() + renameFileDto.getFileName() + "/",
+ userFile.getFilePath() + userFile.getFileName() + "/", sessionUserBean.getUserId());
} else {
- if (renameFileDto.getIsOSS() == 1) {
- LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
- lambdaQueryWrapper.eq(UserFile::getUserFileId, renameFileDto.getUserFileId());
- UserFile userFile = userFileService.getOne(lambdaQueryWrapper);
+ FileBean file = fileService.getById(userFile.getFileId());
+ if (file.getIsOSS() == 1 || file.getStorageType() == 1) {
+// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
+// lambdaQueryWrapper.eq(UserFile::getUserFileId, renameFileDto.getUserFileId());
+// UserFile userFile = userFileService.getOne(lambdaQueryWrapper);
+
- FileBean file = fileService.getById(userFile.getFileId());
String fileUrl = file.getFileUrl();
String newFileUrl = fileUrl.replace(userFile.getFileName(), renameFileDto.getFileName());
@@ -189,7 +191,6 @@ public class FileController {
userFileService.update(lambdaUpdateWrapper);
}
-
}
return RestResult.success();
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index ee122ae..3c12a1d 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -159,8 +159,12 @@ public class FiletransferController {
FileBean fileBean = fileService.getById(userFile.getFileId());
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
aliyunDownload(response, fileBean);
- } else {
+ } else if (fileBean.getStorageType() == 0) {
localFileDownload(response, fileBean);
+ } else if (fileBean.getStorageType() == 1) {
+ aliyunDownload(response, fileBean);
+ } else if (fileBean.getStorageType() == 2) {
+ fastFDSDownload(response, fileBean);
}
}
@@ -230,15 +234,15 @@ public class FiletransferController {
}
- public void fastFDSDownload(HttpServletResponse response, FileBean fileBean) throws IOException {
+ public void fastFDSDownload(HttpServletResponse response, FileBean fileBean){
String group = fileBean.getFileUrl().substring(0, fileBean.getFileUrl().indexOf("/"));
String path = fileBean.getFileUrl().substring(fileBean.getFileUrl().indexOf("/") + 1);
DownloadByteArray downloadByteArray = new DownloadByteArray();
byte[] bytes = fastFileStorageClient.downloadFile(group, path, downloadByteArray);
- // 这里只是为了整合fastdfs,所以写死了文件格式。需要在上传的时候保存文件名。下载的时候使用对应的格式
- response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));
- response.setCharacterEncoding("UTF-8");
+// // 这里只是为了整合fastdfs,所以写死了文件格式。需要在上传的时候保存文件名。下载的时候使用对应的格式
+// response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));
+// response.setCharacterEncoding("UTF-8");
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
diff --git a/file-web/src/main/java/com/qiwenshare/file/domain/FileBean.java b/file-web/src/main/java/com/qiwenshare/file/domain/FileBean.java
index 0c5b0ee..d4bb8a2 100644
--- a/file-web/src/main/java/com/qiwenshare/file/domain/FileBean.java
+++ b/file-web/src/main/java/com/qiwenshare/file/domain/FileBean.java
@@ -34,8 +34,12 @@ public class FileBean {
private Long fileSize;
@Column(columnDefinition="int(1)")
+ @Deprecated
private Integer isOSS;
+ @Column(columnDefinition="int(1)")
+ private Integer storageType;
+
@Column(columnDefinition="int(11)")
private Integer pointCount;
diff --git a/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java b/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
index a1b943e..f005565 100644
--- a/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/dto/file/RenameFileDTO.java
@@ -11,6 +11,7 @@ public class RenameFileDTO {
* 文件路径
*/
@Schema(description = "文件路径")
+ @Deprecated
private String filePath;
/**
@@ -19,9 +20,12 @@ public class RenameFileDTO {
@Schema(description = "文件名")
private String fileName;
@Schema(description = "是否是目录")
+ @Deprecated
private Integer isDir;
@Schema(description = "旧文件名")
+ @Deprecated
private String oldFileName;
@Schema(description = "是否是OSS")
+ @Deprecated
private Integer isOSS;
}
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
index 1da0e6a..466b06d 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
@@ -2,6 +2,7 @@ package com.qiwenshare.file.service;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.qiwenshare.common.operation.FileOperation;
import com.qiwenshare.common.oss.AliyunOSSDelete;
import com.qiwenshare.common.util.FileUtil;
@@ -12,6 +13,7 @@ import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -28,6 +30,8 @@ public class FileService extends ServiceImpl implements IF
FiletransferService filetransferService;
@Resource
QiwenFileConfig qiwenFileConfig;
+ @Autowired
+ private FastFileStorageClient fastFileStorageClient;
// @Override
// public void batchInsertFile(List fileBeanList, Long userId) {
@@ -85,6 +89,16 @@ public class FileService extends ServiceImpl implements IF
if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
+ } else if (fileBean.getStorageType() == 0) {
+ FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
+ if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
+ FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
+ }
+ } else if (fileBean.getStorageType() == 1) {
+ AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
+ } else if (fileBean.getStorageType() == 2){
+ fastFileStorageClient.deleteFile(fileBean.getFileUrl());
+
} else {
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
index aa8aead..5820e02 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
@@ -67,15 +67,15 @@ public class FiletransferService implements IFiletransferService {
uploadFile.setCurrentChunkSize(UploadFileDto.getCurrentChunkSize());
synchronized (FiletransferService.class) {
if (oss.isEnabled()) {
- uploader = aliyunOSSUploaderFactory.getUploader(uploadFile);
+ uploader = aliyunOSSUploaderFactory.getUploader();
} else if ("FastFDS".equals(storyType)) {
- uploader = fastDFSUploaderFactory.getUploader(uploadFile);
+ uploader = fastDFSUploaderFactory.getUploader();
} else {
- uploader = chunkUploaderFactory.getUploader(uploadFile);
+ uploader = chunkUploaderFactory.getUploader();
}
}
- List uploadFileList = uploader.upload(request);
+ List uploadFileList = uploader.upload(request, uploadFile);
for (int i = 0; i < uploadFileList.size(); i++){
uploadFile = uploadFileList.get(i);
FileBean fileBean = new FileBean();
@@ -86,7 +86,7 @@ public class FiletransferService implements IFiletransferService {
fileBean.setFileSize(uploadFile.getFileSize());
//fileBean.setUploadTime(DateUtil.getCurrentTime());
fileBean.setIsOSS(uploadFile.getIsOSS());
-
+ fileBean.setStorageType(uploadFile.getStorageType());
fileBean.setPointCount(1);
fileMapper.insert(fileBean);
UserFile userFile = new UserFile();
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
index c716042..8b90829 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
@@ -62,53 +62,53 @@ public class UserFileService extends ServiceImpl impl
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 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 lambdaQueryWrapper = new LambdaQueryWrapper<>();
-// lambdaQueryWrapper.eq(UserFile::getUserFileId, renameFileDto.getUserFileId());
-// UserFile userFile = userFileService.getOne(lambdaQueryWrapper);
+// public void renameUserFile(Long userFileId, String newFileName, Long userId) {
+// UserFile userFile = userFileMapper.selectById(userFileId);
+// if (1 == userFile.getIsDir()) {
+// LambdaUpdateWrapper 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 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);
//
-// 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 lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
- lambdaUpdateWrapper
- .set(FileBean::getFileUrl, newFileUrl)
- .eq(FileBean::getFileId, fileBean.getFileId());
- fileMapper.update(null, lambdaUpdateWrapper);
-
- LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
- userFileLambdaUpdateWrapper
- .set(UserFile::getFileName, newFileName)
- .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
- .eq(UserFile::getUserFileId, userFileId);
- userFileMapper.update(null, userFileLambdaUpdateWrapper);
- } else {
- LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
- lambdaUpdateWrapper.set(UserFile::getFileName, newFileName)
- .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
- .eq(UserFile::getUserFileId, userFileId);
- userFileMapper.update(null, lambdaUpdateWrapper);
- }
-
-
- }
- }
+// AliyunOSSRename.rename(qiwenFileConfig.getAliyun().getOss(),
+// fileUrl.substring(1),
+// newFileUrl.substring(1));
+// LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+// lambdaUpdateWrapper
+// .set(FileBean::getFileUrl, newFileUrl)
+// .eq(FileBean::getFileId, fileBean.getFileId());
+// fileMapper.update(null, lambdaUpdateWrapper);
+//
+// LambdaUpdateWrapper userFileLambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+// userFileLambdaUpdateWrapper
+// .set(UserFile::getFileName, newFileName)
+// .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
+// .eq(UserFile::getUserFileId, userFileId);
+// userFileMapper.update(null, userFileLambdaUpdateWrapper);
+// } else {
+// LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
+// lambdaUpdateWrapper.set(UserFile::getFileName, newFileName)
+// .set(UserFile::getUploadTime, DateUtil.getCurrentTime())
+// .eq(UserFile::getUserFileId, userFileId);
+// userFileMapper.update(null, lambdaUpdateWrapper);
+// }
+//
+//
+// }
+// }
@Override
public void updateFilepathByFilepath(String oldfilePath, String newfilePath, String fileName, String extendName) {
diff --git a/file-web/src/main/java/com/qiwenshare/file/vo/file/FileListVo.java b/file-web/src/main/java/com/qiwenshare/file/vo/file/FileListVo.java
index df3ddb1..ecc32b1 100644
--- a/file-web/src/main/java/com/qiwenshare/file/vo/file/FileListVo.java
+++ b/file-web/src/main/java/com/qiwenshare/file/vo/file/FileListVo.java
@@ -12,8 +12,11 @@ public class FileListVo {
private Long fileSize;
+ @Deprecated
private Integer isOSS;
+ private Integer storageType;
+
private Integer pointCount;
private String identifier;
diff --git a/file-web/src/main/java/com/qiwenshare/file/vo/share/ShareFileListVO.java b/file-web/src/main/java/com/qiwenshare/file/vo/share/ShareFileListVO.java
index b7133aa..404dfcd 100644
--- a/file-web/src/main/java/com/qiwenshare/file/vo/share/ShareFileListVO.java
+++ b/file-web/src/main/java/com/qiwenshare/file/vo/share/ShareFileListVO.java
@@ -15,7 +15,10 @@ public class ShareFileListVO {
@Schema(description="文件大小")
private Long fileSize;
@Schema(description="是否sso存储")
+ @Deprecated
private Integer isOSS;
+ @Schema(description="存储类型")
+ private Integer storageType;
//
// private Long userFileId;
//
From 9d12434de49bf3b4bbfe62b77df539472d305a6e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=A9=AC=E8=B6=85?= <1162714483@qq.com>
Date: Mon, 22 Mar 2021 23:18:29 +0800
Subject: [PATCH 11/14] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common}/config/AliyunConfig.java | 2 +-
.../qiwenshare/common}/config/FdfsConfig.java | 2 +-
.../common}/config/QiwenFileConfig.java | 3 +-
.../common/domain/DownloadFile.java | 9 +++
.../common/download/Downloader.java | 3 +-
.../download/product/AliyunOSSDownloader.java | 44 ++++++++++-
.../download/product/ChunkDownloader.java | 12 ---
.../download/product/FastDFSDownloader.java | 34 ++++++++-
.../product/LocalStorageDownloader.java | 50 ++++++++++++
.../factory/AliyunOSSOperationFactory.java | 27 +++++++
.../FastDFSOperationFactory.java} | 15 +++-
.../common/factory/FileOperationFactory.java | 10 +++
.../factory/LocalStorageOperationFactory.java | 29 +++++++
.../factory/NormalUploaderFactory.java | 2 +-
.../factory/AliyunOSSUploaderFactory.java | 26 -------
.../upload/factory/ChunkUploaderFactory.java | 27 -------
.../upload/factory/UploaderFactory.java | 10 ---
.../upload/product/AliyunOSSUploader.java | 37 ++++-----
...ploader.java => LocalStorageUploader.java} | 6 +-
.../file/api/IFiletransferService.java | 4 +
.../file/controller/FileController.java | 2 +-
.../controller/FiletransferController.java | 28 +------
.../file/controller/UserController.java | 2 +-
.../qiwenshare/file/service/FileService.java | 2 +-
.../file/service/FiletransferService.java | 76 +++++++++++++------
.../file/service/UserFileService.java | 5 +-
.../resources/config/application.properties | 6 +-
.../mybatis/mapper/UserFileMapper.xml | 41 +++++-----
28 files changed, 324 insertions(+), 190 deletions(-)
rename {file-web/src/main/java/com/qiwenshare/file => file-common/src/main/java/com/qiwenshare/common}/config/AliyunConfig.java (80%)
rename {file-web/src/main/java/com/qiwenshare/file => file-common/src/main/java/com/qiwenshare/common}/config/FdfsConfig.java (91%)
rename {file-web/src/main/java/com/qiwenshare/file => file-common/src/main/java/com/qiwenshare/common}/config/QiwenFileConfig.java (75%)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/domain/DownloadFile.java
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/download/product/LocalStorageDownloader.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/factory/AliyunOSSOperationFactory.java
rename file-common/src/main/java/com/qiwenshare/common/{upload/factory/FastDFSUploaderFactory.java => factory/FastDFSOperationFactory.java} (61%)
create mode 100644 file-common/src/main/java/com/qiwenshare/common/factory/FileOperationFactory.java
create mode 100644 file-common/src/main/java/com/qiwenshare/common/factory/LocalStorageOperationFactory.java
rename file-common/src/main/java/com/qiwenshare/common/{upload => }/factory/NormalUploaderFactory.java (93%)
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
delete mode 100644 file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
rename file-common/src/main/java/com/qiwenshare/common/upload/product/{ChunkUploader.java => LocalStorageUploader.java} (98%)
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/AliyunConfig.java b/file-common/src/main/java/com/qiwenshare/common/config/AliyunConfig.java
similarity index 80%
rename from file-web/src/main/java/com/qiwenshare/file/config/AliyunConfig.java
rename to file-common/src/main/java/com/qiwenshare/common/config/AliyunConfig.java
index 5f455e9..cbf36dd 100644
--- a/file-web/src/main/java/com/qiwenshare/file/config/AliyunConfig.java
+++ b/file-common/src/main/java/com/qiwenshare/common/config/AliyunConfig.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.config;
+package com.qiwenshare.common.config;
import com.qiwenshare.common.domain.AliyunOSS;
import lombok.Data;
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java b/file-common/src/main/java/com/qiwenshare/common/config/FdfsConfig.java
similarity index 91%
rename from file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java
rename to file-common/src/main/java/com/qiwenshare/common/config/FdfsConfig.java
index 754eb5f..0ab7f62 100644
--- a/file-web/src/main/java/com/qiwenshare/file/config/FdfsConfig.java
+++ b/file-common/src/main/java/com/qiwenshare/common/config/FdfsConfig.java
@@ -1,4 +1,4 @@
-package com.qiwenshare.file.config;
+package com.qiwenshare.common.config;
import com.github.tobato.fastdfs.FdfsClientConfig;
import org.springframework.context.annotation.Configuration;
diff --git a/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java b/file-common/src/main/java/com/qiwenshare/common/config/QiwenFileConfig.java
similarity index 75%
rename from file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java
rename to file-common/src/main/java/com/qiwenshare/common/config/QiwenFileConfig.java
index f135471..33a7958 100644
--- a/file-web/src/main/java/com/qiwenshare/file/config/QiwenFileConfig.java
+++ b/file-common/src/main/java/com/qiwenshare/common/config/QiwenFileConfig.java
@@ -1,8 +1,7 @@
-package com.qiwenshare.file.config;
+package com.qiwenshare.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.NestedConfigurationProperty;
import org.springframework.stereotype.Component;
@Data
diff --git a/file-common/src/main/java/com/qiwenshare/common/domain/DownloadFile.java b/file-common/src/main/java/com/qiwenshare/common/domain/DownloadFile.java
new file mode 100644
index 0000000..b66cba6
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/domain/DownloadFile.java
@@ -0,0 +1,9 @@
+package com.qiwenshare.common.domain;
+
+import lombok.Data;
+
+@Data
+public class DownloadFile {
+ private String fileUrl;
+ private String timeStampName;
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java b/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
index 5b244a5..508c04e 100644
--- a/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/download/Downloader.java
@@ -1,10 +1,11 @@
package com.qiwenshare.common.download;
+import com.qiwenshare.common.domain.DownloadFile;
import com.qiwenshare.common.domain.UploadFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public abstract class Downloader {
- public abstract void download(HttpServletResponse httpServletResponse);
+ public abstract void download(HttpServletResponse httpServletResponse, DownloadFile uploadFile);
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
index d0b1c75..5685be2 100644
--- a/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/AliyunOSSDownloader.java
@@ -1,12 +1,54 @@
package com.qiwenshare.common.download.product;
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.model.OSSObject;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import com.qiwenshare.common.config.QiwenFileConfig;
+import com.qiwenshare.common.domain.DownloadFile;
import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.oss.AliyunOSSDownload;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
+import java.io.BufferedInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+@Component
public class AliyunOSSDownloader extends Downloader {
+ @Resource
+ QiwenFileConfig qiwenFileConfig;
@Override
- public void download(HttpServletResponse httpServletResponse) {
+ public void download(HttpServletResponse httpServletResponse, DownloadFile downloadFile) {
+ BufferedInputStream bis = null;
+ byte[] buffer = new byte[1024];
+ AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
+ OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
+ OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), downloadFile.getTimeStampName());
+ InputStream inputStream = ossObject.getObjectContent();
+ try {
+ bis = new BufferedInputStream(inputStream);
+ OutputStream os = httpServletResponse.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ ossClient.shutdown();
}
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
deleted file mode 100644
index ee454b2..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/download/product/ChunkDownloader.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.qiwenshare.common.download.product;
-
-import com.qiwenshare.common.download.Downloader;
-
-import javax.servlet.http.HttpServletResponse;
-
-public class ChunkDownloader extends Downloader {
- @Override
- public void download(HttpServletResponse httpServletResponse) {
-
- }
-}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
index d01f776..5371474 100644
--- a/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/FastDFSDownloader.java
@@ -1,12 +1,44 @@
package com.qiwenshare.common.download.product;
+import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import com.qiwenshare.common.domain.DownloadFile;
+import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.download.Downloader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+@Component
public class FastDFSDownloader extends Downloader {
+ @Autowired
+ private FastFileStorageClient fastFileStorageClient;
@Override
- public void download(HttpServletResponse httpServletResponse) {
+ public void download(HttpServletResponse httpServletResponse, DownloadFile downloadFile) {
+ String group = downloadFile.getFileUrl().substring(0, downloadFile.getFileUrl().indexOf("/"));
+ String path = downloadFile.getFileUrl().substring(downloadFile.getFileUrl().indexOf("/") + 1);
+ DownloadByteArray downloadByteArray = new DownloadByteArray();
+ byte[] bytes = fastFileStorageClient.downloadFile(group, path, downloadByteArray);
+// // 这里只是为了整合fastdfs,所以写死了文件格式。需要在上传的时候保存文件名。下载的时候使用对应的格式
+// response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("sb.xlsx", "UTF-8"));
+// response.setCharacterEncoding("UTF-8");
+ ServletOutputStream outputStream = null;
+ try {
+ outputStream = httpServletResponse.getOutputStream();
+ outputStream.write(bytes);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ outputStream.flush();
+ outputStream.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
}
}
diff --git a/file-common/src/main/java/com/qiwenshare/common/download/product/LocalStorageDownloader.java b/file-common/src/main/java/com/qiwenshare/common/download/product/LocalStorageDownloader.java
new file mode 100644
index 0000000..7c86ee9
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/download/product/LocalStorageDownloader.java
@@ -0,0 +1,50 @@
+package com.qiwenshare.common.download.product;
+
+import com.github.tobato.fastdfs.service.FastFileStorageClient;
+import com.qiwenshare.common.domain.DownloadFile;
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.operation.FileOperation;
+import com.qiwenshare.common.util.PathUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+
+@Component
+public class LocalStorageDownloader extends Downloader {
+ @Override
+ public void download(HttpServletResponse httpServletResponse, DownloadFile downloadFile) {
+ BufferedInputStream bis = null;
+ byte[] buffer = new byte[1024];
+ //设置文件路径
+ File file = FileOperation.newFile(PathUtil.getStaticPath() + downloadFile.getFileUrl());
+ if (file.exists()) {
+
+
+ FileInputStream fis = null;
+
+ try {
+ fis = new FileInputStream(file);
+ bis = new BufferedInputStream(fis);
+ OutputStream os = httpServletResponse.getOutputStream();
+ int i = bis.read(buffer);
+ while (i != -1) {
+ os.write(buffer, 0, i);
+ i = bis.read(buffer);
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (bis != null) {
+ try {
+ bis.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/factory/AliyunOSSOperationFactory.java b/file-common/src/main/java/com/qiwenshare/common/factory/AliyunOSSOperationFactory.java
new file mode 100644
index 0000000..f14f9f4
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/factory/AliyunOSSOperationFactory.java
@@ -0,0 +1,27 @@
+package com.qiwenshare.common.factory;
+
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.download.product.AliyunOSSDownloader;
+import com.qiwenshare.common.upload.product.AliyunOSSUploader;
+import com.qiwenshare.common.upload.Uploader;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class AliyunOSSOperationFactory implements FileOperationFactory {
+ @Resource
+ AliyunOSSUploader aliyunOSSUploader;
+ @Resource
+ AliyunOSSDownloader aliyunOSSDownloader;
+ @Override
+ public Uploader getUploader() {
+ return aliyunOSSUploader;
+ }
+
+ @Override
+ public Downloader getDownloader() {
+ return aliyunOSSDownloader;
+ }
+
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/factory/FastDFSOperationFactory.java
similarity index 61%
rename from file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
rename to file-common/src/main/java/com/qiwenshare/common/factory/FastDFSOperationFactory.java
index c030695..e998851 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/FastDFSUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/factory/FastDFSOperationFactory.java
@@ -1,7 +1,7 @@
-package com.qiwenshare.common.upload.factory;
+package com.qiwenshare.common.factory;
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
-import com.qiwenshare.common.domain.UploadFile;
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.download.product.FastDFSDownloader;
import com.qiwenshare.common.upload.Uploader;
import com.qiwenshare.common.upload.product.FastDFSUploader;
import org.springframework.stereotype.Component;
@@ -9,17 +9,24 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
-public class FastDFSUploaderFactory implements UploaderFactory {
+public class FastDFSOperationFactory implements FileOperationFactory {
// @Resource
// AppendFileStorageClient defaultAppendFileStorageClient;
@Resource
FastDFSUploader fastDFSUploader;
+ @Resource
+ FastDFSDownloader fastDFSDownloader;
@Override
public Uploader getUploader() {
return fastDFSUploader;
}
+ @Override
+ public Downloader getDownloader() {
+ return fastDFSDownloader;
+ }
+
// @Override
// public Uploader getUploader(UploadFile uploadFile) {
// return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
diff --git a/file-common/src/main/java/com/qiwenshare/common/factory/FileOperationFactory.java b/file-common/src/main/java/com/qiwenshare/common/factory/FileOperationFactory.java
new file mode 100644
index 0000000..4db416d
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/factory/FileOperationFactory.java
@@ -0,0 +1,10 @@
+package com.qiwenshare.common.factory;
+
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.upload.Uploader;
+
+public interface FileOperationFactory {
+ Uploader getUploader();
+ Downloader getDownloader();
+// Uploader getUploader(UploadFile uploadFile);
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/factory/LocalStorageOperationFactory.java b/file-common/src/main/java/com/qiwenshare/common/factory/LocalStorageOperationFactory.java
new file mode 100644
index 0000000..67e445d
--- /dev/null
+++ b/file-common/src/main/java/com/qiwenshare/common/factory/LocalStorageOperationFactory.java
@@ -0,0 +1,29 @@
+package com.qiwenshare.common.factory;
+
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.download.product.LocalStorageDownloader;
+import com.qiwenshare.common.upload.product.LocalStorageUploader;
+import com.qiwenshare.common.upload.Uploader;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+@Component
+public class LocalStorageOperationFactory implements FileOperationFactory{
+
+ @Resource
+ LocalStorageUploader ChunkUploader;
+ @Resource
+ LocalStorageDownloader localStorageDownloader;
+ @Override
+ public Uploader getUploader() {
+ return ChunkUploader;
+ }
+
+ @Override
+ public Downloader getDownloader() {
+ return localStorageDownloader;
+ }
+
+
+}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/factory/NormalUploaderFactory.java
similarity index 93%
rename from file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
rename to file-common/src/main/java/com/qiwenshare/common/factory/NormalUploaderFactory.java
index 1bde493..40d5466 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/NormalUploaderFactory.java
+++ b/file-common/src/main/java/com/qiwenshare/common/factory/NormalUploaderFactory.java
@@ -1,4 +1,4 @@
-//package com.qiwenshare.common.upload.factory;
+//package com.qiwenshare.common.factory;
//
//import com.github.tobato.fastdfs.service.AppendFileStorageClient;
//import com.qiwenshare.common.domain.UploadFile;
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
deleted file mode 100644
index a238ac4..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/AliyunOSSUploaderFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.qiwenshare.common.upload.factory;
-
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
-import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.upload.product.AliyunOSSUploader;
-import com.qiwenshare.common.upload.Uploader;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-@Component
-public class AliyunOSSUploaderFactory implements UploaderFactory {
- @Resource
- AliyunOSSUploader aliyunOSSUploader;
- @Override
- public Uploader getUploader() {
- return aliyunOSSUploader;
- }
-
-// @Override
-// public Uploader getUploader(UploadFile uploadFile) {
-// return new AliyunOSSUploader(uploadFile);
-// }
-
-}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
deleted file mode 100644
index cdb3303..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/ChunkUploaderFactory.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.qiwenshare.common.upload.factory;
-
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
-import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.upload.product.ChunkUploader;
-import com.qiwenshare.common.upload.Uploader;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-
-@Component
-public class ChunkUploaderFactory implements UploaderFactory {
-
- @Resource
- ChunkUploader ChunkUploader;
- @Override
- public Uploader getUploader() {
- return ChunkUploader;
- }
-
-// @Override
-// public Uploader getUploader(UploadFile uploadFile) {
-// return new ChunkUploader(uploadFile);
-// }
-
-
-}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java b/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
deleted file mode 100644
index df1272f..0000000
--- a/file-common/src/main/java/com/qiwenshare/common/upload/factory/UploaderFactory.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.qiwenshare.common.upload.factory;
-
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
-import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.upload.Uploader;
-
-public interface UploaderFactory {
- Uploader getUploader();
-// Uploader getUploader(UploadFile uploadFile);
-}
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
index d6e3188..28b9cdc 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/AliyunOSSUploader.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.*;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.common.domain.AliyunOSS;
import com.qiwenshare.common.domain.UploadFile;
import com.qiwenshare.common.exception.UploadGeneralException;
@@ -20,6 +21,7 @@ import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
+import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
@@ -28,12 +30,13 @@ import java.util.*;
@Component
public class AliyunOSSUploader extends Uploader {
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
-
+ @Resource
+ QiwenFileConfig qiwenFileConfig;
// private UploadFile uploadFile;
- private String endpoint;
- private String accessKeyId;
- private String accessKeySecret;
- private String bucketName;
+// private String endpoint;
+// private String accessKeyId;
+// private String accessKeySecret;
+// private String bucketName;
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
public static Map> partETagsMap = new HashMap>();
@@ -57,12 +60,12 @@ public class AliyunOSSUploader extends Uploader {
List saveUploadFileList = new ArrayList<>();
StandardMultipartHttpServletRequest request = (StandardMultipartHttpServletRequest) httpServletRequest;
- AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
-
- endpoint = aliyunOSS.getEndpoint();
- accessKeyId = aliyunOSS.getAccessKeyId();
- accessKeySecret = aliyunOSS.getAccessKeySecret();
- bucketName = aliyunOSS.getBucketName();
+// AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
+//
+// endpoint = aliyunOSS.getEndpoint();
+// accessKeyId = aliyunOSS.getAccessKeyId();
+// accessKeySecret = aliyunOSS.getAccessKeySecret();
+// bucketName = aliyunOSS.getBucketName();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
throw new UploadGeneralException("未包含文件上传域");
@@ -114,12 +117,12 @@ public class AliyunOSSUploader extends Uploader {
synchronized (AliyunOSSUploader.class) {
if (uploadPartRequestMap.get(uploadFile.getIdentifier()) == null) {
- InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, ossFilePath.substring(1));
+ InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(qiwenFileConfig.getAliyun().getOss().getBucketName(), ossFilePath.substring(1));
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
String uploadId = upresult.getUploadId();
UploadFileInfo uploadPartRequest = new UploadFileInfo();
- uploadPartRequest.setBucketName(bucketName);
+ uploadPartRequest.setBucketName(qiwenFileConfig.getAliyun().getOss().getBucketName());
uploadPartRequest.setKey(ossFilePath.substring(1));
uploadPartRequest.setUploadId(uploadId);
uploadPartRequestMap.put(uploadFile.getIdentifier(), uploadPartRequest);
@@ -190,7 +193,7 @@ public class AliyunOSSUploader extends Uploader {
Collections.sort(partETags, Comparator.comparingInt(PartETag::getPartNumber));
UploadFileInfo uploadFileInfo = uploadPartRequestMap.get(uploadFile.getIdentifier());
CompleteMultipartUploadRequest completeMultipartUploadRequest =
- new CompleteMultipartUploadRequest(bucketName,
+ new CompleteMultipartUploadRequest(qiwenFileConfig.getAliyun().getOss().getBucketName(),
uploadFileInfo.getKey(),
uploadFileInfo.getUploadId(),
partETags);
@@ -207,7 +210,7 @@ public class AliyunOSSUploader extends Uploader {
private void listFile(UploadFile uploadFile) {
// 列举已上传的分片,其中uploadId来自于InitiateMultipartUpload返回的结果。
- ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
+ ListPartsRequest listPartsRequest = new ListPartsRequest(qiwenFileConfig.getAliyun().getOss().getBucketName(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
// 设置uploadId。
//listPartsRequest.setUploadId(uploadId);
// 设置分页时每一页中分片数量为100个。默认列举1000个分片。
@@ -237,7 +240,7 @@ public class AliyunOSSUploader extends Uploader {
*/
private void cancelUpload(UploadFile uploadFile) {
AbortMultipartUploadRequest abortMultipartUploadRequest =
- new AbortMultipartUploadRequest(bucketName, uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
+ new AbortMultipartUploadRequest(qiwenFileConfig.getAliyun().getOss().getBucketName(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey(), uploadPartRequestMap.get(uploadFile.getIdentifier()).getUploadId());
getClient(uploadFile).abortMultipartUpload(abortMultipartUploadRequest);
}
@@ -257,7 +260,7 @@ public class AliyunOSSUploader extends Uploader {
private synchronized OSS getClient(UploadFile uploadFile) {
OSS ossClient = null;
if (ossMap.get(uploadFile.getIdentifier()) == null) {
- ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+ ossClient = new OSSClientBuilder().build(qiwenFileConfig.getAliyun().getOss().getEndpoint(), qiwenFileConfig.getAliyun().getOss().getAccessKeyId(), qiwenFileConfig.getAliyun().getOss().getAccessKeySecret());
ossMap.put(uploadFile.getIdentifier(), ossClient);
} else {
ossClient = ossMap.get(uploadFile.getIdentifier());
diff --git a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java b/file-common/src/main/java/com/qiwenshare/common/upload/product/LocalStorageUploader.java
similarity index 98%
rename from file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
rename to file-common/src/main/java/com/qiwenshare/common/upload/product/LocalStorageUploader.java
index 6acb4ba..027bffd 100644
--- a/file-common/src/main/java/com/qiwenshare/common/upload/product/ChunkUploader.java
+++ b/file-common/src/main/java/com/qiwenshare/common/upload/product/LocalStorageUploader.java
@@ -26,11 +26,11 @@ import java.util.Iterator;
import java.util.List;
import java.util.UUID;
@Component
-public class ChunkUploader extends Uploader {
- private static final Logger logger = LoggerFactory.getLogger(ChunkUploader.class);
+public class LocalStorageUploader extends Uploader {
+ private static final Logger logger = LoggerFactory.getLogger(LocalStorageUploader.class);
// private UploadFile uploadFile;
- public ChunkUploader() {
+ public LocalStorageUploader() {
}
//
diff --git a/file-web/src/main/java/com/qiwenshare/file/api/IFiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/api/IFiletransferService.java
index a5336e3..61bee29 100644
--- a/file-web/src/main/java/com/qiwenshare/file/api/IFiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/api/IFiletransferService.java
@@ -1,9 +1,11 @@
package com.qiwenshare.file.api;
import com.qiwenshare.file.domain.StorageBean;
+import com.qiwenshare.file.dto.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
public interface IFiletransferService {
@@ -18,6 +20,8 @@ public interface IFiletransferService {
*/
void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId);
+ void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO);
+
StorageBean selectStorageBean(StorageBean storageBean);
void insertStorageBean(StorageBean storageBean);
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
index 096ae22..71b3a8f 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FileController.java
@@ -14,7 +14,7 @@ import com.qiwenshare.file.api.IFileService;
import com.qiwenshare.file.api.IRecoveryFileService;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.api.IUserService;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.config.es.FileSearch;
import com.qiwenshare.file.domain.*;
import com.qiwenshare.file.dto.*;
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
index 3c12a1d..799c59e 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/FiletransferController.java
@@ -3,7 +3,6 @@ package com.qiwenshare.file.controller;
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
import com.github.tobato.fastdfs.proto.storage.DownloadByteArray;
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.qiwenshare.common.cbb.DateUtil;
import com.qiwenshare.common.operation.FileOperation;
@@ -16,7 +15,7 @@ import com.qiwenshare.file.api.IFileService;
import com.qiwenshare.file.api.IFiletransferService;
import com.qiwenshare.file.api.IUserFileService;
import com.qiwenshare.file.api.IUserService;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.StorageBean;
import com.qiwenshare.file.domain.UserBean;
@@ -34,7 +33,6 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
-import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -144,29 +142,7 @@ public class FiletransferController {
@MyLog(operation = "下载文件", module = CURRENT_MODULE)
@RequestMapping(value = "/downloadfile", method = RequestMethod.GET)
public void downloadFile(HttpServletResponse response, DownloadFileDTO downloadFileDTO) {
- UserFile userFile = userFileService.getById(downloadFileDTO.getUserFileId());
-
- String fileName = userFile.getFileName() + "." + userFile.getExtendName();
- try {
- fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- response.setContentType("application/force-download");// 设置强制下载不打开
- response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
-
-
- FileBean fileBean = fileService.getById(userFile.getFileId());
- if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
- aliyunDownload(response, fileBean);
- } else if (fileBean.getStorageType() == 0) {
- localFileDownload(response, fileBean);
- } else if (fileBean.getStorageType() == 1) {
- aliyunDownload(response, fileBean);
- } else if (fileBean.getStorageType() == 2) {
- fastFDSDownload(response, fileBean);
- }
-
+ filetransferService.downloadFile(response, downloadFileDTO);
}
private void localFileDownload(HttpServletResponse response, FileBean fileBean) {
diff --git a/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java b/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
index 028557a..953d2b2 100644
--- a/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
+++ b/file-web/src/main/java/com/qiwenshare/file/controller/UserController.java
@@ -7,7 +7,7 @@ import com.qiwenshare.common.domain.AliyunOSS;
import com.qiwenshare.common.util.JjwtUtil;
import com.qiwenshare.file.anno.MyLog;
import com.qiwenshare.file.api.IUserService;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.dto.user.RegisterDTO;
import com.qiwenshare.file.vo.user.UserLoginVo;
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
index 466b06d..281771a 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FileService.java
@@ -8,7 +8,7 @@ import com.qiwenshare.common.oss.AliyunOSSDelete;
import com.qiwenshare.common.util.FileUtil;
import com.qiwenshare.common.util.PathUtil;
import com.qiwenshare.file.api.IFileService;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.mapper.UserFileMapper;
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
index 5820e02..321dac7 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/FiletransferService.java
@@ -1,26 +1,28 @@
package com.qiwenshare.file.service;
+import java.io.UnsupportedEncodingException;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.github.tobato.fastdfs.service.AppendFileStorageClient;
import com.qiwenshare.common.cbb.DateUtil;
+import com.qiwenshare.common.domain.DownloadFile;
import com.qiwenshare.common.domain.UploadFile;
-import com.qiwenshare.common.upload.factory.AliyunOSSUploaderFactory;
-import com.qiwenshare.common.upload.factory.ChunkUploaderFactory;
+//import com.qiwenshare.common.factory.FileOperationFactory;
+import com.qiwenshare.common.download.Downloader;
+import com.qiwenshare.common.factory.FileOperationFactory;
import com.qiwenshare.common.upload.Uploader;
-import com.qiwenshare.common.upload.factory.FastDFSUploaderFactory;
-import com.qiwenshare.common.upload.factory.UploaderFactory;
+
import com.qiwenshare.file.api.IFiletransferService;
-import com.qiwenshare.common.domain.AliyunOSS;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.domain.UserFile;
+import com.qiwenshare.file.dto.DownloadFileDTO;
import com.qiwenshare.file.dto.UploadFileDTO;
import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.domain.FileBean;
@@ -37,27 +39,23 @@ public class FiletransferService implements IFiletransferService {
StorageMapper storageMapper;
@Resource
FileMapper fileMapper;
-
@Resource
QiwenFileConfig qiwenFileConfig;
+
@Resource
UserFileMapper userFileMapper;
@Resource
- UploaderFactory fastDFSUploaderFactory;
+ FileOperationFactory fastDFSOperationFactory;
@Resource
- UploaderFactory aliyunOSSUploaderFactory;
+ FileOperationFactory aliyunOSSOperationFactory;
@Resource
- UploaderFactory chunkUploaderFactory;
-
-
+ FileOperationFactory localStorageOperationFactory;
@Override
public void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId) {
- AliyunOSS oss = qiwenFileConfig.getAliyun().getOss();
- String storyType = qiwenFileConfig.getStorageType();
- request.setAttribute("oss", oss);
- Uploader uploader;
+
+ Uploader uploader = null;
UploadFile uploadFile = new UploadFile();
uploadFile.setChunkNumber(UploadFileDto.getChunkNumber());
uploadFile.setChunkSize(UploadFileDto.getChunkSize());
@@ -66,12 +64,13 @@ public class FiletransferService implements IFiletransferService {
uploadFile.setTotalSize(UploadFileDto.getTotalSize());
uploadFile.setCurrentChunkSize(UploadFileDto.getCurrentChunkSize());
synchronized (FiletransferService.class) {
- if (oss.isEnabled()) {
- uploader = aliyunOSSUploaderFactory.getUploader();
- } else if ("FastFDS".equals(storyType)) {
- uploader = fastDFSUploaderFactory.getUploader();
- } else {
- uploader = chunkUploaderFactory.getUploader();
+ String storageType = qiwenFileConfig.getStorageType();
+ if ("0".equals(storageType)) {
+ uploader = localStorageOperationFactory.getUploader();
+ } else if ("1".equals(storageType)) {
+ uploader = aliyunOSSOperationFactory.getUploader();
+ } else if ("2".equals(storageType)) {
+ uploader = fastDFSOperationFactory.getUploader();
}
}
@@ -118,6 +117,37 @@ public class FiletransferService implements IFiletransferService {
}
}
+ @Override
+ public void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO) {
+ UserFile userFile = userFileMapper.selectById(downloadFileDTO.getUserFileId());
+
+ String fileName = userFile.getFileName() + "." + userFile.getExtendName();
+ try {
+ fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ httpServletResponse.setContentType("application/force-download");// 设置强制下载不打开
+ httpServletResponse.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
+
+
+ FileBean fileBean = fileMapper.selectById(userFile.getFileId());
+ Downloader downloader = null;
+ if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
+ downloader = aliyunOSSOperationFactory.getDownloader();
+ } else if (fileBean.getStorageType() == 0) {
+ downloader = localStorageOperationFactory.getDownloader();
+ } else if (fileBean.getStorageType() == 1) {
+ downloader = aliyunOSSOperationFactory.getDownloader();
+ } else if (fileBean.getStorageType() == 2) {
+ downloader = fastDFSOperationFactory.getDownloader();
+ }
+ DownloadFile uploadFile = new DownloadFile();
+ uploadFile.setFileUrl(fileBean.getFileUrl());
+ uploadFile.setTimeStampName(fileBean.getTimeStampName());
+ downloader.download(httpServletResponse, uploadFile);
+ }
+
@Override
public StorageBean selectStorageBean(StorageBean storageBean) {
LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>();
diff --git a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
index 8b90829..a33a857 100644
--- a/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
+++ b/file-web/src/main/java/com/qiwenshare/file/service/UserFileService.java
@@ -4,12 +4,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiwenshare.common.cbb.DateUtil;
-import com.qiwenshare.common.oss.AliyunOSSRename;
import com.qiwenshare.file.api.IUserFileService;
-import com.qiwenshare.file.config.QiwenFileConfig;
+import com.qiwenshare.common.config.QiwenFileConfig;
import com.qiwenshare.file.domain.FileBean;
import com.qiwenshare.file.domain.RecoveryFile;
-import com.qiwenshare.file.domain.UserBean;
import com.qiwenshare.file.domain.UserFile;
import com.qiwenshare.file.mapper.FileMapper;
import com.qiwenshare.file.mapper.RecoveryFileMapper;
@@ -20,7 +18,6 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
-import java.util.Map;
import java.util.UUID;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
diff --git a/file-web/src/main/resources/config/application.properties b/file-web/src/main/resources/config/application.properties
index 9336bdf..8522145 100644
--- a/file-web/src/main/resources/config/application.properties
+++ b/file-web/src/main/resources/config/application.properties
@@ -51,11 +51,11 @@ mybatis-plus.global-config.banner=false
qiwen-file.remote-login=false
qiwen-file.share-mode=false
-#FastFDS
-#qiwen-file.storage-type=FastFDS
+
+qiwen-file.storage-type=0
#是否启用阿里云oss
-qiwen-file.aliyun.oss.enabled=false
+#qiwen-file.aliyun.oss.enabled=false
#阿里云oss基本配置
qiwen-file.aliyun.oss.endpoint=
qiwen-file.aliyun.oss.access-key-id=
diff --git a/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml b/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml
index 009dea1..f41756b 100644
--- a/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml
+++ b/file-web/src/main/resources/mybatis/mapper/UserFileMapper.xml
@@ -30,9 +30,7 @@
limit #{beginCount}, #{pageCount}
-
-
- 基于springboot + vue 框架开发的Web文件系统,旨在为用户提供一个简单、方便的文件存储方案,能够以完善的目录结构体系,对文件进行管理 。
+ 基于Spring Boot + VUE CLI@3 框架开发的分布式文件系统,旨在为用户和企业提供一个简单、方便的文件存储方案,能够以完善的目录结构体系,对文件进行管理 。
@@ -15,7 +15,6 @@
-
在线演示环境 |
@@ -42,13 +41,20 @@
3. 支持对zip文件和rar文件的在线解压缩
4. 支持文件和目录的移动和复制
5. 多文件格式分类查看
-6. 支持阿里云OSS对象存储
-7. 增加分片上传,该功能同时支持本地存储和阿里云OSS
+6. 支持阿里云OSS对象存储,FastDFS存储
+7. 增加分片上传,该功能同时支持本地存储和阿里云OSS,FastDFS
8. 支持极速秒传功能,提高上传效率
9. 上传文件前台实时显示上传文件进度,上传速率,百分比等信息
10. 支持文件重命名
11. 可实时显示文件存储占用情况及总占用容量
-12. ...
+12. 支持ElasticSearch文件搜索
+13. ...
+
+## 项目代码地址
+|系统|地址|
+|-|-|
+|奇文网盘前台|[https://gitee.com/qiwen-cloud/qiwen-file-web](https://gitee.com/qiwen-cloud/qiwen-file-web)|
+|奇文网盘后台|[https://gitee.com/qiwen-cloud/qiwen-file](https://gitee.com/qiwen-cloud/qiwen-file)|
## 软件架构
该项目采用前后端分离的方式进行开发和部署,主要用到以下关键技术
From 693e63ca0a848401d89015b33f129287ef62c2be Mon Sep 17 00:00:00 2001
From: MAC <1162714483@qq.com>
Date: Wed, 24 Mar 2021 22:55:42 +0800
Subject: [PATCH 14/14] update README.md.
---
README.md | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/README.md b/README.md
index 4ae8850..65cf692 100644
--- a/README.md
+++ b/README.md
@@ -56,6 +56,10 @@
|奇文网盘前台|[https://gitee.com/qiwen-cloud/qiwen-file-web](https://gitee.com/qiwen-cloud/qiwen-file-web)|
|奇文网盘后台|[https://gitee.com/qiwen-cloud/qiwen-file](https://gitee.com/qiwen-cloud/qiwen-file)|
+## 网络拓扑图
+
+
+
## 软件架构
该项目采用前后端分离的方式进行开发和部署,主要用到以下关键技术