代码优化
This commit is contained in:
parent
58373861e7
commit
9d12434de4
@ -1,4 +1,4 @@
|
||||
package com.qiwenshare.file.config;
|
||||
package com.qiwenshare.common.config;
|
||||
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
import lombok.Data;
|
@ -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;
|
@ -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
|
@ -0,0 +1,9 @@
|
||||
package com.qiwenshare.common.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DownloadFile {
|
||||
private String fileUrl;
|
||||
private String timeStampName;
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
@ -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);
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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;
|
@ -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);
|
||||
// }
|
||||
|
||||
}
|
@ -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);
|
||||
// }
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
@ -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<String, List<PartETag>> partETagsMap = new HashMap<String, List<PartETag>>();
|
||||
@ -57,12 +60,12 @@ public class AliyunOSSUploader extends Uploader {
|
||||
|
||||
List<UploadFile> 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());
|
||||
|
@ -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() {
|
||||
|
||||
}
|
||||
//
|
@ -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);
|
||||
|
@ -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.*;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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<StorageBean> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
|
@ -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;
|
||||
|
@ -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=
|
||||
|
@ -30,9 +30,7 @@
|
||||
limit #{beginCount}, #{pageCount}
|
||||
|
||||
</select>
|
||||
|
||||
<select id="selectFileByExtendName" parameterType="com.qiwenshare.file.domain.UserFile" resultType="com.qiwenshare.file.vo.file.FileListVo">
|
||||
select * from userfile
|
||||
<sql id="selectByExtendName" >
|
||||
left join file on file.fileId = userfile.fileId
|
||||
where extendName in
|
||||
<foreach collection="fileNameList" open="(" close=")" separator="," item="fileName" >
|
||||
@ -40,41 +38,36 @@
|
||||
</foreach>
|
||||
and userId = #{userId}
|
||||
and deleteFlag = 0
|
||||
</sql>
|
||||
<sql id="selectByNotExtendName">
|
||||
left join file on file.fileId = userfile.fileId
|
||||
where extendName not in
|
||||
<foreach collection="fileNameList" open="(" close=")" separator="," item="fileName" >
|
||||
#{fileName}
|
||||
</foreach>
|
||||
and userId = #{userId}
|
||||
and deleteFlag = 0
|
||||
</sql>
|
||||
<select id="selectFileByExtendName" parameterType="com.qiwenshare.file.domain.UserFile" resultType="com.qiwenshare.file.vo.file.FileListVo">
|
||||
select * from userfile
|
||||
<include refid="selectByExtendName"></include>
|
||||
limit #{beginCount}, #{pageCount}
|
||||
</select>
|
||||
|
||||
<select id="selectCountByExtendName" parameterType="com.qiwenshare.file.domain.UserFile" resultType="java.lang.Long">
|
||||
select count(*) from userfile
|
||||
left join file on file.fileId = userfile.fileId
|
||||
where extendName in
|
||||
<foreach collection="fileNameList" open="(" close=")" separator="," item="fileName" >
|
||||
#{fileName}
|
||||
</foreach>
|
||||
and userId = #{userId}
|
||||
and deleteFlag = 0
|
||||
<include refid="selectByExtendName"></include>
|
||||
</select>
|
||||
|
||||
<select id="selectFileNotInExtendNames" parameterType="com.qiwenshare.file.domain.UserFile" resultType="com.qiwenshare.file.vo.file.FileListVo">
|
||||
select * from userfile
|
||||
left join file on file.fileId = userfile.fileId
|
||||
where extendName not in
|
||||
<foreach collection="fileNameList" open="(" close=")" separator="," item="fileName" >
|
||||
#{fileName}
|
||||
</foreach>
|
||||
and userId = #{userId}
|
||||
and deleteFlag = 0
|
||||
<include refid="selectByNotExtendName"></include>
|
||||
limit #{beginCount}, #{pageCount}
|
||||
</select>
|
||||
|
||||
<select id="selectCountNotInExtendNames" parameterType="com.qiwenshare.file.domain.UserFile" resultType="java.lang.Long">
|
||||
select count(*) from userfile
|
||||
left join file on file.fileId = userfile.fileId
|
||||
where extendName not in
|
||||
<foreach collection="fileNameList" open="(" close=")" separator="," item="fileName" >
|
||||
#{fileName}
|
||||
</foreach>
|
||||
and userId = #{userId}
|
||||
and deleteFlag = 0
|
||||
<include refid="selectByNotExtendName"></include>
|
||||
</select>
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user