代码优化

This commit is contained in:
马超 2021-03-22 23:18:29 +08:00
parent 58373861e7
commit 9d12434de4
28 changed files with 324 additions and 190 deletions

View File

@ -1,4 +1,4 @@
package com.qiwenshare.file.config;
package com.qiwenshare.common.config;
import com.qiwenshare.common.domain.AliyunOSS;
import lombok.Data;

View File

@ -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;

View File

@ -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

View File

@ -0,0 +1,9 @@
package com.qiwenshare.common.domain;
import lombok.Data;
@Data
public class DownloadFile {
private String fileUrl;
private String timeStampName;
}

View File

@ -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);
}

View File

@ -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();
}
}

View File

@ -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) {
}
}

View File

@ -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();
}
}
}
}

View File

@ -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();
}
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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);

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);
// }
}

View File

@ -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);
// }
}

View File

@ -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);
}

View File

@ -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());

View File

@ -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() {
}
//

View File

@ -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);

View File

@ -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.*;

View File

@ -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) {

View File

@ -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;

View File

@ -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;

View File

@ -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<>();

View File

@ -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;

View File

@ -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=

View File

@ -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>