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} - - + select * from userfile + limit #{beginCount}, #{pageCount}