基础代码优化
This commit is contained in:
parent
9d12434de4
commit
fc77d48251
@ -12,6 +12,7 @@ public class QiwenFileConfig {
|
||||
private boolean shareMode;
|
||||
|
||||
private String storageType;
|
||||
private String cacheMode;
|
||||
|
||||
private AliyunConfig aliyun = new AliyunConfig();
|
||||
|
||||
|
@ -0,0 +1,9 @@
|
||||
package com.qiwenshare.common.domain;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DeleteFile {
|
||||
private String fileUrl;
|
||||
private String timeStampName;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package com.qiwenshare.common.cbb;
|
||||
package com.qiwenshare.common.exception;
|
||||
|
||||
public class NotSameFileExpection extends Exception {
|
||||
public NotSameFileExpection() {
|
@ -1,9 +1,14 @@
|
||||
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 com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.operation.delete.product.AliyunOSSDeleter;
|
||||
|
||||
import com.qiwenshare.common.operation.download.Downloader;
|
||||
import com.qiwenshare.common.operation.download.product.AliyunOSSDownloader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.product.AliyunOSSUploader;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -14,6 +19,8 @@ public class AliyunOSSOperationFactory implements FileOperationFactory {
|
||||
AliyunOSSUploader aliyunOSSUploader;
|
||||
@Resource
|
||||
AliyunOSSDownloader aliyunOSSDownloader;
|
||||
@Resource
|
||||
AliyunOSSDeleter aliyunOSSDeleter;
|
||||
@Override
|
||||
public Uploader getUploader() {
|
||||
return aliyunOSSUploader;
|
||||
@ -24,4 +31,9 @@ public class AliyunOSSOperationFactory implements FileOperationFactory {
|
||||
return aliyunOSSDownloader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Deleter getDeleter() {
|
||||
return aliyunOSSDeleter;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
package com.qiwenshare.common.factory;
|
||||
|
||||
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 com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.operation.delete.product.FastDFSDeleter;
|
||||
import com.qiwenshare.common.operation.download.Downloader;
|
||||
import com.qiwenshare.common.operation.download.product.FastDFSDownloader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.product.FastDFSUploader;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -11,12 +13,12 @@ import javax.annotation.Resource;
|
||||
@Component
|
||||
public class FastDFSOperationFactory implements FileOperationFactory {
|
||||
|
||||
// @Resource
|
||||
// AppendFileStorageClient defaultAppendFileStorageClient;
|
||||
@Resource
|
||||
FastDFSUploader fastDFSUploader;
|
||||
@Resource
|
||||
FastDFSDownloader fastDFSDownloader;
|
||||
@Resource
|
||||
FastDFSDeleter fastDFSDeleter;
|
||||
@Override
|
||||
public Uploader getUploader() {
|
||||
return fastDFSUploader;
|
||||
@ -27,9 +29,10 @@ public class FastDFSOperationFactory implements FileOperationFactory {
|
||||
return fastDFSDownloader;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public Uploader getUploader(UploadFile uploadFile) {
|
||||
// return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
|
||||
// }
|
||||
@Override
|
||||
public Deleter getDeleter() {
|
||||
return fastDFSDeleter;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,10 +1,11 @@
|
||||
package com.qiwenshare.common.factory;
|
||||
|
||||
import com.qiwenshare.common.download.Downloader;
|
||||
import com.qiwenshare.common.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.operation.download.Downloader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
|
||||
public interface FileOperationFactory {
|
||||
Uploader getUploader();
|
||||
Downloader getDownloader();
|
||||
// Uploader getUploader(UploadFile uploadFile);
|
||||
Deleter getDeleter();
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
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 com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.operation.delete.product.LocalStorageDeleter;
|
||||
import com.qiwenshare.common.operation.download.Downloader;
|
||||
import com.qiwenshare.common.operation.download.product.LocalStorageDownloader;
|
||||
import com.qiwenshare.common.operation.upload.product.LocalStorageUploader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -12,12 +14,14 @@ import javax.annotation.Resource;
|
||||
public class LocalStorageOperationFactory implements FileOperationFactory{
|
||||
|
||||
@Resource
|
||||
LocalStorageUploader ChunkUploader;
|
||||
LocalStorageUploader localStorageUploader;
|
||||
@Resource
|
||||
LocalStorageDownloader localStorageDownloader;
|
||||
@Resource
|
||||
LocalStorageDeleter localStorageDeleter;
|
||||
@Override
|
||||
public Uploader getUploader() {
|
||||
return ChunkUploader;
|
||||
return localStorageUploader;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -25,5 +29,10 @@ public class LocalStorageOperationFactory implements FileOperationFactory{
|
||||
return localStorageDownloader;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Deleter getDeleter() {
|
||||
return localStorageDeleter;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,24 +0,0 @@
|
||||
//package com.qiwenshare.common.factory;
|
||||
//
|
||||
//import com.github.tobato.fastdfs.service.AppendFileStorageClient;
|
||||
//import com.qiwenshare.common.domain.UploadFile;
|
||||
//import com.qiwenshare.common.upload.product.NormalUploader;
|
||||
//import com.qiwenshare.common.upload.Uploader;
|
||||
//import org.springframework.stereotype.Component;
|
||||
//
|
||||
//import javax.annotation.Resource;
|
||||
//
|
||||
//@Component
|
||||
//public class NormalUploaderFactory implements UploaderFactory {
|
||||
//
|
||||
// @Override
|
||||
// public Uploader getUploader() {
|
||||
// return new NormalUploader();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Uploader getUploader(UploadFile uploadFile) {
|
||||
// return new NormalUploader();
|
||||
// }
|
||||
//
|
||||
//}
|
@ -0,0 +1,7 @@
|
||||
package com.qiwenshare.common.operation.delete;
|
||||
|
||||
import com.qiwenshare.common.domain.DeleteFile;
|
||||
|
||||
public abstract class Deleter {
|
||||
public abstract void delete(DeleteFile deleteFile);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.qiwenshare.common.operation.delete.product;
|
||||
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||
import com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.domain.DeleteFile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@Component
|
||||
public class AliyunOSSDeleter extends Deleter {
|
||||
@Resource
|
||||
QiwenFileConfig qiwenFileConfig;
|
||||
@Override
|
||||
public void delete(DeleteFile deleteFile) {
|
||||
// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), deleteFile.getFileUrl().substring(1));
|
||||
String endpoint = qiwenFileConfig.getAliyun().getOss().getEndpoint();
|
||||
String accessKeyId = qiwenFileConfig.getAliyun().getOss().getAccessKeyId();
|
||||
String accessKeySecret = qiwenFileConfig.getAliyun().getOss().getAccessKeySecret();
|
||||
String bucketName = qiwenFileConfig.getAliyun().getOss().getBucketName();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
|
||||
ossClient.deleteObject(bucketName, deleteFile.getFileUrl().substring(1));
|
||||
|
||||
|
||||
|
||||
// 关闭OSSClient。
|
||||
ossClient.shutdown();
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.qiwenshare.common.operation.delete.product;
|
||||
|
||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||
import com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.domain.DeleteFile;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class FastDFSDeleter extends Deleter {
|
||||
@Autowired
|
||||
private FastFileStorageClient fastFileStorageClient;
|
||||
@Override
|
||||
public void delete(DeleteFile deleteFile) {
|
||||
fastFileStorageClient.deleteFile(deleteFile.getFileUrl());
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.qiwenshare.common.operation.delete.product;
|
||||
|
||||
import com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.domain.DeleteFile;
|
||||
import com.qiwenshare.common.operation.FileOperation;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class LocalStorageDeleter extends Deleter {
|
||||
@Override
|
||||
public void delete(DeleteFile deleteFile) {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + deleteFile.getFileUrl());
|
||||
if (FileUtil.isImageFile(FileUtil.getFileExtendName(deleteFile.getFileUrl()))) {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + deleteFile.getFileUrl().replace(deleteFile.getTimeStampName(), deleteFile.getTimeStampName() + "_min"));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
package com.qiwenshare.common.download;
|
||||
package com.qiwenshare.common.operation.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, DownloadFile uploadFile);
|
@ -1,13 +1,12 @@
|
||||
package com.qiwenshare.common.download.product;
|
||||
package com.qiwenshare.common.operation.download.product;
|
||||
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.OSSObject;
|
||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
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 com.qiwenshare.common.operation.download.Downloader;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -23,10 +22,11 @@ public class AliyunOSSDownloader extends Downloader {
|
||||
QiwenFileConfig qiwenFileConfig;
|
||||
@Override
|
||||
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());
|
||||
|
||||
OSS ossClient = createOSSClient(qiwenFileConfig.getAliyun().getOss());
|
||||
OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), downloadFile.getTimeStampName());
|
||||
InputStream inputStream = ossObject.getObjectContent();
|
||||
try {
|
||||
@ -51,4 +51,12 @@ public class AliyunOSSDownloader extends Downloader {
|
||||
}
|
||||
ossClient.shutdown();
|
||||
}
|
||||
|
||||
public OSS createOSSClient(AliyunOSS aliyunOSS) {
|
||||
String endpoint = aliyunOSS.getEndpoint();
|
||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
return ossClient;
|
||||
}
|
||||
}
|
@ -1,10 +1,9 @@
|
||||
package com.qiwenshare.common.download.product;
|
||||
package com.qiwenshare.common.operation.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 com.qiwenshare.common.operation.download.Downloader;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
@ -1,11 +1,9 @@
|
||||
package com.qiwenshare.common.download.product;
|
||||
package com.qiwenshare.common.operation.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.operation.download.Downloader;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
@ -1,10 +1,9 @@
|
||||
package com.qiwenshare.common.upload;
|
||||
package com.qiwenshare.common.operation.upload;
|
||||
|
||||
import com.qiwenshare.common.domain.UploadFile;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.File;
|
||||
@ -24,14 +23,11 @@ public abstract class Uploader {
|
||||
// 文件大小限制,单位KB
|
||||
public final int maxSize = 10000000;
|
||||
|
||||
// protected StandardMultipartHttpServletRequest request = null;
|
||||
|
||||
public abstract List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile);
|
||||
|
||||
/**
|
||||
* 根据字符串创建本地目录 并按照日期建立子目录返回
|
||||
*
|
||||
* @param path
|
||||
* @return
|
||||
*/
|
||||
protected String getSaveFilePath() {
|
||||
@ -73,7 +69,6 @@ public abstract class Uploader {
|
||||
}
|
||||
|
||||
public synchronized boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
||||
//File confFile = new File(savePath, timeStampName + ".conf");
|
||||
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
||||
//设置文件长度
|
||||
confAccessFile.setLength(param.getTotalChunks());
|
@ -1,14 +1,13 @@
|
||||
package com.qiwenshare.common.upload.product;
|
||||
package com.qiwenshare.common.operation.upload.product;
|
||||
|
||||
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;
|
||||
import com.qiwenshare.common.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import lombok.Data;
|
||||
@ -24,7 +23,6 @@ import org.springframework.web.multipart.support.StandardMultipartHttpServletReq
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.*;
|
||||
@Component
|
||||
@ -32,11 +30,7 @@ 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;
|
||||
|
||||
|
||||
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
|
||||
public static Map<String, List<PartETag>> partETagsMap = new HashMap<String, List<PartETag>>();
|
||||
@ -46,40 +40,22 @@ public class AliyunOSSUploader extends Uploader {
|
||||
|
||||
public static Map<String, String> timeStampNameMap = new HashMap<>();
|
||||
|
||||
public AliyunOSSUploader() {
|
||||
|
||||
}
|
||||
|
||||
// public AliyunOSSUploader(UploadFile uploadFile) {
|
||||
// this.uploadFile = uploadFile;
|
||||
// }
|
||||
|
||||
@Override
|
||||
public List<UploadFile> upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
|
||||
logger.info("开始上传upload");
|
||||
|
||||
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();
|
||||
|
||||
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
|
||||
if (!isMultipart) {
|
||||
throw new UploadGeneralException("未包含文件上传域");
|
||||
// UploadFile uploadFile = new UploadFile();
|
||||
// uploadFile.setSuccess(0);
|
||||
// uploadFile.setMessage("未包含文件上传域");
|
||||
// saveUploadFileList.add(uploadFile);
|
||||
// return saveUploadFileList;
|
||||
}
|
||||
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
|
||||
String savePath = getSaveFilePath();
|
||||
dff.setRepository(new File(savePath));
|
||||
|
||||
ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
|
||||
ServletFileUpload sfu = new ServletFileUpload(dff);
|
||||
sfu.setSizeMax(this.maxSize * 1024L);
|
||||
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
|
||||
Iterator<String> iter = request.getFileNames();
|
@ -1,10 +1,10 @@
|
||||
package com.qiwenshare.common.upload.product;
|
||||
package com.qiwenshare.common.operation.upload.product;
|
||||
|
||||
import com.github.tobato.fastdfs.domain.StorePath;
|
||||
import com.github.tobato.fastdfs.service.AppendFileStorageClient;
|
||||
import com.qiwenshare.common.domain.UploadFile;
|
||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
||||
import com.qiwenshare.common.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -25,27 +25,11 @@ public class FastDFSUploader extends Uploader {
|
||||
@Resource
|
||||
AppendFileStorageClient defaultAppendFileStorageClient;
|
||||
|
||||
// UploadFile uploadFile;
|
||||
|
||||
private static Map<String, Integer> CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
|
||||
private static Map<String, Long> UPLOADED_SIZE = new HashMap<>();
|
||||
private static Map<String, String> STORE_PATH = new HashMap<>();
|
||||
private static Map<String, Object> LOCK_MAP = new HashMap<>();
|
||||
|
||||
public FastDFSUploader() {
|
||||
|
||||
}
|
||||
|
||||
// public FastDFSUploader(UploadFile uploadFile) {
|
||||
// this.uploadFile = uploadFile;
|
||||
// }
|
||||
//
|
||||
// public FastDFSUploader(UploadFile uploadFile, AppendFileStorageClient defaultAppendFileStorageClient) {
|
||||
//// this.uploadFile = uploadFile;
|
||||
// this.defaultAppendFileStorageClient = defaultAppendFileStorageClient;
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
public List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile) {
|
||||
log.info("开始上传upload");
|
@ -1,10 +1,10 @@
|
||||
package com.qiwenshare.common.upload.product;
|
||||
package com.qiwenshare.common.operation.upload.product;
|
||||
|
||||
import com.qiwenshare.common.cbb.NotSameFileExpection;
|
||||
import com.qiwenshare.common.exception.NotSameFileExpection;
|
||||
import com.qiwenshare.common.domain.UploadFile;
|
||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
||||
import com.qiwenshare.common.operation.ImageOperation;
|
||||
import com.qiwenshare.common.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
@ -1,55 +0,0 @@
|
||||
/**
|
||||
* 示例说明
|
||||
*
|
||||
* HelloOSS是OSS Java SDK的示例程序,您可以修改endpoint、accessKeyId、accessKeySecret、bucketName后直接运行。
|
||||
* 运行方法请参考README。
|
||||
*
|
||||
* 本示例中的并不包括OSS Java SDK的所有功能,详细功能及使用方法,请参看“SDK手册 > Java-SDK”,
|
||||
* 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
|
||||
*
|
||||
* 调用OSS Java SDK的方法时,抛出异常表示有错误发生;没有抛出异常表示成功执行。
|
||||
* 当错误发生时,OSS Java SDK的方法会抛出异常,异常中包括错误码、错误信息,详细请参看“SDK手册 > Java-SDK > 异常处理”,
|
||||
* 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
|
||||
*
|
||||
* OSS控制台可以直观的看到您调用OSS Java SDK的结果,OSS控制台地址是:https://oss.console.aliyun.com/index#/。
|
||||
* OSS控制台使用方法请参看文档中心的“控制台用户指南”, 指南的来链接地址是:https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
|
||||
*
|
||||
* OSS的文档中心地址是:https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
|
||||
* OSS Java SDK的文档地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
|
||||
*
|
||||
*/
|
||||
|
||||
package com.qiwenshare.common.oss;
|
||||
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
|
||||
public class AliyunOSSDelete {
|
||||
|
||||
|
||||
/**
|
||||
* 流式上传
|
||||
*/
|
||||
public static void deleteObject(AliyunOSS aliyunOSS, String objectName) {
|
||||
String endpoint = aliyunOSS.getEndpoint();
|
||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||
String bucketName = aliyunOSS.getBucketName();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
|
||||
ossClient.deleteObject(bucketName, objectName);
|
||||
|
||||
|
||||
|
||||
// 关闭OSSClient。
|
||||
ossClient.shutdown();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
package com.qiwenshare.common.oss;
|
||||
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.OSSObject;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
public class AliyunOSSDownload {
|
||||
private String endpoint = "";
|
||||
private String accessKeyId = "";
|
||||
private String accessKeySecret = "";
|
||||
private String bucketName = "";
|
||||
public OSS createOSSClient(AliyunOSS aliyunOSS) {
|
||||
String endpoint = aliyunOSS.getEndpoint();
|
||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||
this.bucketName = aliyunOSS.getBucketName();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
return ossClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* 流式下载
|
||||
*/
|
||||
public InputStream streamDownload(String objectName) {
|
||||
|
||||
// 创建OSSClient实例。
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
|
||||
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
|
||||
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
|
||||
return ossObject.getObjectContent();
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
/**
|
||||
* 示例说明
|
||||
*
|
||||
* HelloOSS是OSS Java SDK的示例程序,您可以修改endpoint、accessKeyId、accessKeySecret、bucketName后直接运行。
|
||||
* 运行方法请参考README。
|
||||
*
|
||||
* 本示例中的并不包括OSS Java SDK的所有功能,详细功能及使用方法,请参看“SDK手册 > Java-SDK”,
|
||||
* 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
|
||||
*
|
||||
* 调用OSS Java SDK的方法时,抛出异常表示有错误发生;没有抛出异常表示成功执行。
|
||||
* 当错误发生时,OSS Java SDK的方法会抛出异常,异常中包括错误码、错误信息,详细请参看“SDK手册 > Java-SDK > 异常处理”,
|
||||
* 链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
|
||||
*
|
||||
* OSS控制台可以直观的看到您调用OSS Java SDK的结果,OSS控制台地址是:https://oss.console.aliyun.com/index#/。
|
||||
* OSS控制台使用方法请参看文档中心的“控制台用户指南”, 指南的来链接地址是:https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
|
||||
*
|
||||
* OSS的文档中心地址是:https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
|
||||
* OSS Java SDK的文档地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
|
||||
*
|
||||
*/
|
||||
|
||||
package com.qiwenshare.common.oss;
|
||||
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.CopyObjectResult;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
|
||||
public class AliyunOSSRename {
|
||||
|
||||
/**
|
||||
* 流式上传
|
||||
*/
|
||||
public static void rename(AliyunOSS aliyunOSS, String sourceObjectName, String destinationObjectName) {
|
||||
String endpoint = aliyunOSS.getEndpoint();
|
||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||
String bucketName = aliyunOSS.getBucketName();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
CopyObjectResult result = ossClient.copyObject(bucketName, sourceObjectName, bucketName, destinationObjectName);
|
||||
|
||||
ossClient.deleteObject(bucketName, sourceObjectName);
|
||||
ObjectMetadata metadata = new ObjectMetadata();
|
||||
// if ("pdf".equals(FileUtil.getFileType(objectName))) {
|
||||
// metadata.setContentDisposition("attachment");
|
||||
// }
|
||||
|
||||
// ossClient.putObject(bucketName, objectName, inputStream, metadata);
|
||||
|
||||
|
||||
// 关闭OSSClient。
|
||||
ossClient.shutdown();
|
||||
}
|
||||
|
||||
}
|
@ -1,10 +1,8 @@
|
||||
package com.qiwenshare.common.cbb;
|
||||
package com.qiwenshare.common.result;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 统一结果返回
|
||||
* @param <T>
|
@ -1,4 +1,4 @@
|
||||
package com.qiwenshare.common.cbb;
|
||||
package com.qiwenshare.common.result;
|
||||
|
||||
import lombok.Getter;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package com.qiwenshare.common.cbb;
|
||||
package com.qiwenshare.common.util;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
@ -1,4 +1,4 @@
|
||||
package com.qiwenshare.common.cbb;
|
||||
package com.qiwenshare.common.util;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
@ -1,4 +0,0 @@
|
||||
package com.qiwenshare.common.util;
|
||||
|
||||
public class OfficeUtil {
|
||||
}
|
@ -0,0 +1,218 @@
|
||||
package com.qiwenshare.common.util;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.data.redis.connection.RedisStringCommands;
|
||||
import org.springframework.data.redis.connection.ReturnType;
|
||||
import org.springframework.data.redis.core.RedisCallback;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.data.redis.core.types.Expiration;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* redis实现分布式锁
|
||||
*
|
||||
*/
|
||||
public class RedisLockUtils {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(RedisLockUtils.class);
|
||||
|
||||
/**
|
||||
* 默认轮休获取锁间隔时间, 单位:毫秒
|
||||
*/
|
||||
private static final int DEFAULT_ACQUIRE_RESOLUTION_MILLIS = 100;
|
||||
|
||||
private static final String UNLOCK_LUA;
|
||||
|
||||
static {
|
||||
StringBuilder lua = new StringBuilder();
|
||||
lua.append("if redis.call(\"get\",KEYS[1]) == ARGV[1] ");
|
||||
lua.append("then ");
|
||||
lua.append(" return redis.call(\"del\",KEYS[1]) ");
|
||||
lua.append("else ");
|
||||
lua.append(" return 0 ");
|
||||
lua.append("end ");
|
||||
UNLOCK_LUA = lua.toString();
|
||||
}
|
||||
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
private final ThreadLocal<Map<String, LockVO>> lockMap = new ThreadLocal<>();
|
||||
|
||||
public RedisLockUtils(RedisTemplate redisTemplate) {
|
||||
this.redisTemplate = redisTemplate;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取锁,没有获取到则一直等待
|
||||
*
|
||||
* @param key redis key
|
||||
* @param expire 锁过期时间, 单位 秒
|
||||
*/
|
||||
public void lock(final String key, long expire) {
|
||||
try {
|
||||
acquireLock(key, expire, -1);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("acquire lock exception", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取锁,指定时间内没有获取到,返回false。否则 返回true
|
||||
*
|
||||
* @param key redis key
|
||||
* @param expire 锁过期时间, 单位 秒
|
||||
* @param waitTime 获取锁超时时间, -1代表永不超时, 单位 秒
|
||||
*/
|
||||
public boolean tryLock(final String key, long expire, long waitTime) {
|
||||
try {
|
||||
return acquireLock(key, expire, waitTime);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("acquire lock exception", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 释放锁
|
||||
*
|
||||
* @param key redis key
|
||||
*/
|
||||
public void unlock(String key) {
|
||||
try {
|
||||
release(key);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("release lock exception", e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key redis key
|
||||
* @param expire 锁过期时间, 单位 秒
|
||||
* @param waitTime 获取锁超时时间, -1代表永不超时, 单位 秒
|
||||
* @return if true success else fail
|
||||
* @throws InterruptedException 阻塞方法收到中断请求
|
||||
*/
|
||||
private boolean acquireLock(String key, long expire, long waitTime) throws InterruptedException {
|
||||
//如果之前获取到了并且没有超时,则返回获取成功
|
||||
boolean acquired = acquired(key);
|
||||
if (acquired) {
|
||||
return true;
|
||||
}
|
||||
long acquireTime = waitTime == -1 ? -1 : waitTime * 1000 + System.currentTimeMillis();
|
||||
//同一个进程,对于同一个key锁,只允许先到的去尝试获取。
|
||||
// key.intern() 如果常量池中存在当前字符串, 就会直接返回当前字符串.
|
||||
// 如果常量池中没有此字符串, 会将此字符串放入常量池中后, 再返回
|
||||
synchronized (key.intern()) {
|
||||
String lockId = UUID.randomUUID().toString();
|
||||
do {
|
||||
long before = System.currentTimeMillis();
|
||||
boolean hasLock = tryLock(key, expire, lockId);
|
||||
//获取锁成功
|
||||
if (hasLock) {
|
||||
long after = System.currentTimeMillis();
|
||||
Map<String, LockVO> map = lockMap.get();
|
||||
if (map == null) {
|
||||
map = new HashMap<>(2);
|
||||
lockMap.set(map);
|
||||
}
|
||||
map.put(key, new LockVO(1, lockId, expire * 1000 + before, expire * 1000 + after));
|
||||
log.debug("acquire lock {} {} ", key, 1);
|
||||
return true;
|
||||
}
|
||||
Thread.sleep(DEFAULT_ACQUIRE_RESOLUTION_MILLIS);
|
||||
} while (acquireTime == -1 || acquireTime > System.currentTimeMillis());
|
||||
}
|
||||
log.debug("acquire lock {} fail,because timeout ", key);
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean acquired(String key) {
|
||||
Map<String, LockVO> map = lockMap.get();
|
||||
if (map == null || map.size() == 0 || !map.containsKey(key)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
LockVO vo = map.get(key);
|
||||
if (vo.beforeExpireTime < System.currentTimeMillis()) {
|
||||
log.debug("lock {} maybe release, because timeout ", key);
|
||||
return false;
|
||||
}
|
||||
int after = ++vo.count;
|
||||
log.debug("acquire lock {} {} ", key, after);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 释放锁
|
||||
*
|
||||
* @param key redis key
|
||||
*/
|
||||
private void release(String key) {
|
||||
Map<String, LockVO> map = lockMap.get();
|
||||
if (map == null || map.size() == 0 || !map.containsKey(key)) {
|
||||
return;
|
||||
}
|
||||
LockVO vo = map.get(key);
|
||||
if (vo.afterExpireTime < System.currentTimeMillis()) {
|
||||
log.debug("release lock {}, because timeout ", key);
|
||||
map.remove(key);
|
||||
return;
|
||||
}
|
||||
int after = --vo.count;
|
||||
log.debug("release lock {} {} ", key, after);
|
||||
if (after > 0) {
|
||||
return;
|
||||
}
|
||||
map.remove(key);
|
||||
RedisCallback<Boolean> callback = (connection) ->
|
||||
connection.eval(UNLOCK_LUA.getBytes(StandardCharsets.UTF_8), ReturnType.BOOLEAN, 1,
|
||||
(key).getBytes(StandardCharsets.UTF_8), vo.lockId.getBytes(StandardCharsets.UTF_8));
|
||||
redisTemplate.execute(callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param key 锁的key
|
||||
* @param expire 锁的超时时间 秒
|
||||
* @param lockId 获取锁后,UUID生成的唯一ID
|
||||
* @return if true success else fail
|
||||
*/
|
||||
private boolean tryLock(String key, long expire, String lockId) {
|
||||
RedisCallback<Boolean> callback = (connection) ->
|
||||
connection.set((key).getBytes(StandardCharsets.UTF_8),
|
||||
lockId.getBytes(StandardCharsets.UTF_8), Expiration.seconds(expire), RedisStringCommands.SetOption.SET_IF_ABSENT);
|
||||
return (Boolean) redisTemplate.execute(callback);
|
||||
}
|
||||
|
||||
private static class LockVO {
|
||||
/**
|
||||
* 锁重入的次数
|
||||
*/
|
||||
private int count;
|
||||
|
||||
/**
|
||||
* 获取锁后,UUID生成的唯一ID
|
||||
*/
|
||||
private String lockId;
|
||||
/**
|
||||
* 获取锁之前的时间戳
|
||||
*/
|
||||
private long beforeExpireTime;
|
||||
/**
|
||||
* 获取到锁的时间戳
|
||||
*/
|
||||
private long afterExpireTime;
|
||||
|
||||
LockVO(int count, String lockId, long beforeExpireTime, long afterExpireTime) {
|
||||
this.count = count;
|
||||
this.lockId = lockId;
|
||||
this.beforeExpireTime = beforeExpireTime;
|
||||
this.afterExpireTime = afterExpireTime;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.qiwenshare.file.advice;
|
||||
|
||||
import com.qiwenshare.common.cbb.ResultCodeEnum;
|
||||
import com.qiwenshare.common.result.ResultCodeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
|
@ -1,7 +1,7 @@
|
||||
package com.qiwenshare.file.advice;
|
||||
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.cbb.ResultCodeEnum;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.result.ResultCodeEnum;
|
||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -9,7 +9,6 @@ import org.springframework.web.bind.annotation.ControllerAdvice;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.client.HttpClientErrorException;
|
||||
|
||||
/**
|
||||
* 该注解为统一异常处理的核心
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.qiwenshare.file.aop;
|
||||
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
import com.qiwenshare.file.api.IOperationLogService;
|
||||
import com.qiwenshare.file.api.IUserService;
|
||||
|
@ -19,7 +19,7 @@ public interface IFileService extends IService<FileBean> {
|
||||
|
||||
// List<FileBean> selectFileListByPath(FileBean fileBean);
|
||||
|
||||
void deleteLocalFile(FileBean fileBean);
|
||||
// void deleteLocalFile(FileBean fileBean);
|
||||
|
||||
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.qiwenshare.file.api;
|
||||
|
||||
import com.qiwenshare.file.domain.FileBean;
|
||||
import com.qiwenshare.file.domain.StorageBean;
|
||||
import com.qiwenshare.file.dto.DownloadFileDTO;
|
||||
import com.qiwenshare.file.dto.UploadFileDTO;
|
||||
@ -21,7 +22,7 @@ public interface IFiletransferService {
|
||||
void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId);
|
||||
|
||||
void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO);
|
||||
|
||||
void deleteFile(FileBean fileBean);
|
||||
StorageBean selectStorageBean(StorageBean storageBean);
|
||||
|
||||
void insertStorageBean(StorageBean storageBean);
|
||||
|
@ -1,11 +1,9 @@
|
||||
package com.qiwenshare.file.api;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.file.domain.UserBean;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IUserService extends IService<UserBean> {
|
||||
|
||||
UserBean getUserBeanByToken(String token);
|
||||
|
@ -1,12 +1,16 @@
|
||||
package com.qiwenshare.file.controller;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.aliyun.oss.OSS;
|
||||
import com.aliyun.oss.OSSClientBuilder;
|
||||
import com.aliyun.oss.model.CopyObjectResult;
|
||||
import com.aliyun.oss.model.ObjectMetadata;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
import com.qiwenshare.common.operation.FileOperation;
|
||||
import com.qiwenshare.common.oss.AliyunOSSRename;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
@ -168,7 +172,7 @@ public class FileController {
|
||||
String fileUrl = file.getFileUrl();
|
||||
String newFileUrl = fileUrl.replace(userFile.getFileName(), renameFileDto.getFileName());
|
||||
|
||||
AliyunOSSRename.rename(qiwenFileConfig.getAliyun().getOss(),
|
||||
rename(qiwenFileConfig.getAliyun().getOss(),
|
||||
fileUrl.substring(1),
|
||||
newFileUrl.substring(1));
|
||||
LambdaUpdateWrapper<FileBean> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||
@ -196,6 +200,27 @@ public class FileController {
|
||||
return RestResult.success();
|
||||
}
|
||||
|
||||
private void rename(AliyunOSS aliyunOSS, String sourceObjectName, String destinationObjectName) {
|
||||
String endpoint = aliyunOSS.getEndpoint();
|
||||
String accessKeyId = aliyunOSS.getAccessKeyId();
|
||||
String accessKeySecret = aliyunOSS.getAccessKeySecret();
|
||||
String bucketName = aliyunOSS.getBucketName();
|
||||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||||
CopyObjectResult result = ossClient.copyObject(bucketName, sourceObjectName, bucketName, destinationObjectName);
|
||||
|
||||
ossClient.deleteObject(bucketName, sourceObjectName);
|
||||
ObjectMetadata metadata = new ObjectMetadata();
|
||||
// if ("pdf".equals(FileUtil.getFileType(objectName))) {
|
||||
// metadata.setContentDisposition("attachment");
|
||||
// }
|
||||
|
||||
// ossClient.putObject(bucketName, objectName, inputStream, metadata);
|
||||
|
||||
|
||||
// 关闭OSSClient。
|
||||
ossClient.shutdown();
|
||||
}
|
||||
|
||||
|
||||
@Operation(summary = "获取文件列表", description = "用来做前台列表展示", tags = {"file"})
|
||||
@RequestMapping(value = "/getfilelist", method = RequestMethod.GET)
|
||||
|
@ -1,14 +1,11 @@
|
||||
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.FastFileStorageClient;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.operation.FileOperation;
|
||||
import com.qiwenshare.common.oss.AliyunOSSDownload;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
import com.qiwenshare.file.api.IFileService;
|
||||
@ -179,35 +176,7 @@ public class FiletransferController {
|
||||
}
|
||||
}
|
||||
|
||||
private void aliyunDownload(HttpServletResponse response, FileBean fileBean) {
|
||||
BufferedInputStream bis = null;
|
||||
byte[] buffer = new byte[1024];
|
||||
AliyunOSSDownload aliyunOSSDownload= new AliyunOSSDownload();
|
||||
OSS ossClient = aliyunOSSDownload.createOSSClient(qiwenFileConfig.getAliyun().getOss());
|
||||
OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), fileBean.getTimeStampName());
|
||||
InputStream inputStream = ossObject.getObjectContent();
|
||||
try {
|
||||
bis = new BufferedInputStream(inputStream);
|
||||
OutputStream os = response.getOutputStream();
|
||||
int i = bis.read(buffer);
|
||||
while (i != -1) {
|
||||
os.write(buffer, 0, i);
|
||||
i = bis.read(buffer);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (bis != null) {
|
||||
try {
|
||||
bis.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
ossClient.shutdown();
|
||||
}
|
||||
|
||||
|
||||
public void fastFDSDownload(HttpServletResponse response, FileBean fileBean){
|
||||
|
@ -3,8 +3,8 @@ package com.qiwenshare.file.controller;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
import com.qiwenshare.file.api.IRecoveryFileService;
|
||||
|
@ -4,8 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
import com.qiwenshare.file.api.IShareService;
|
||||
import com.qiwenshare.file.api.IUserService;
|
||||
|
@ -8,6 +8,7 @@ import com.qiwenshare.file.config.es.FileSearch;
|
||||
import com.qiwenshare.file.domain.FileBean;
|
||||
import com.qiwenshare.file.domain.UserFile;
|
||||
import com.qiwenshare.file.service.FileService;
|
||||
import com.qiwenshare.file.service.FiletransferService;
|
||||
import com.qiwenshare.file.service.UserFileService;
|
||||
import com.qiwenshare.file.service.UserService;
|
||||
import com.qiwenshare.file.vo.file.FileListVo;
|
||||
@ -30,6 +31,8 @@ public class TaskController {
|
||||
FileService fileService;
|
||||
@Resource
|
||||
UserFileService userFileService;
|
||||
@Resource
|
||||
FiletransferService filetransferService;
|
||||
@Autowired
|
||||
private IElasticSearchService elasticSearchService;
|
||||
|
||||
@ -43,7 +46,7 @@ public class TaskController {
|
||||
for (int i = 0; i < fileBeanList.size(); i++) {
|
||||
FileBean fileBean = fileBeanList.get(i);
|
||||
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
||||
fileService.deleteLocalFile(fileBean);
|
||||
filetransferService.deleteFile(fileBean);
|
||||
fileService.removeById(fileBean.getFileId());
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@ package com.qiwenshare.file.controller;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.domain.AliyunOSS;
|
||||
import com.qiwenshare.common.util.JjwtUtil;
|
||||
import com.qiwenshare.file.anno.MyLog;
|
||||
|
@ -1,12 +1,7 @@
|
||||
package com.qiwenshare.file.service;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||
import com.qiwenshare.common.operation.FileOperation;
|
||||
import com.qiwenshare.common.oss.AliyunOSSDelete;
|
||||
import com.qiwenshare.common.util.FileUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import com.qiwenshare.file.api.IFileService;
|
||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||
import com.qiwenshare.file.domain.FileBean;
|
||||
@ -82,31 +77,31 @@ public class FileService extends ServiceImpl<FileMapper, FileBean> implements IF
|
||||
// .orderByDesc(FileBean::getIsDir);
|
||||
// return fileMapper.selectList(lambdaQueryWrapper);
|
||||
// }
|
||||
@Override
|
||||
public void deleteLocalFile(FileBean fileBean) {
|
||||
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
||||
//删除服务器文件
|
||||
if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){
|
||||
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
|
||||
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||
} else if (fileBean.getStorageType() == 0) {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||
if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
||||
}
|
||||
} else if (fileBean.getStorageType() == 1) {
|
||||
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||
} else if (fileBean.getStorageType() == 2){
|
||||
fastFileStorageClient.deleteFile(fileBean.getFileUrl());
|
||||
|
||||
} else {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||
if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public void deleteLocalFile(FileBean fileBean) {
|
||||
// log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
||||
// //删除服务器文件
|
||||
// if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){
|
||||
// if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
|
||||
// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||
// } else if (fileBean.getStorageType() == 0) {
|
||||
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||
// if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
||||
// }
|
||||
// } else if (fileBean.getStorageType() == 1) {
|
||||
// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||
// } else if (fileBean.getStorageType() == 2){
|
||||
// fastFileStorageClient.deleteFile(fileBean.getFileUrl());
|
||||
//
|
||||
// } else {
|
||||
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||
// if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
@ -10,13 +10,15 @@ 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.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.domain.DeleteFile;
|
||||
import com.qiwenshare.common.domain.DownloadFile;
|
||||
import com.qiwenshare.common.domain.UploadFile;
|
||||
//import com.qiwenshare.common.factory.FileOperationFactory;
|
||||
import com.qiwenshare.common.download.Downloader;
|
||||
import com.qiwenshare.common.operation.delete.Deleter;
|
||||
import com.qiwenshare.common.operation.download.Downloader;
|
||||
import com.qiwenshare.common.factory.FileOperationFactory;
|
||||
import com.qiwenshare.common.upload.Uploader;
|
||||
import com.qiwenshare.common.operation.upload.Uploader;
|
||||
|
||||
import com.qiwenshare.file.api.IFiletransferService;
|
||||
|
||||
@ -148,6 +150,24 @@ public class FiletransferService implements IFiletransferService {
|
||||
downloader.download(httpServletResponse, uploadFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteFile(FileBean fileBean) {
|
||||
Deleter deleter = null;
|
||||
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
|
||||
deleter = aliyunOSSOperationFactory.getDeleter();
|
||||
} else if (fileBean.getStorageType() == 0) {
|
||||
deleter = localStorageOperationFactory.getDeleter();
|
||||
} else if (fileBean.getStorageType() == 1) {
|
||||
deleter = aliyunOSSOperationFactory.getDeleter();
|
||||
} else if (fileBean.getStorageType() == 2) {
|
||||
deleter = fastDFSOperationFactory.getDeleter();
|
||||
}
|
||||
DeleteFile deleteFile = new DeleteFile();
|
||||
deleteFile.setFileUrl(fileBean.getFileUrl());
|
||||
deleteFile.setTimeStampName(fileBean.getTimeStampName());
|
||||
deleter.delete(deleteFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StorageBean selectStorageBean(StorageBean storageBean) {
|
||||
LambdaQueryWrapper<StorageBean> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
|
@ -4,12 +4,11 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.util.PathUtil;
|
||||
import com.qiwenshare.file.api.IRecoveryFileService;
|
||||
import com.qiwenshare.file.domain.FileBean;
|
||||
import com.qiwenshare.file.domain.RecoveryFile;
|
||||
import com.qiwenshare.file.domain.UserBean;
|
||||
import com.qiwenshare.file.domain.UserFile;
|
||||
import com.qiwenshare.file.mapper.FileMapper;
|
||||
import com.qiwenshare.file.mapper.RecoveryFileMapper;
|
||||
|
@ -3,7 +3,7 @@ package com.qiwenshare.file.service;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.file.api.IUserFileService;
|
||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||
import com.qiwenshare.file.domain.FileBean;
|
||||
|
@ -3,8 +3,8 @@ package com.qiwenshare.file.service;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.cbb.RestResult;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.common.result.RestResult;
|
||||
import com.qiwenshare.common.util.JjwtUtil;
|
||||
import com.qiwenshare.common.util.PasswordUtil;
|
||||
import com.qiwenshare.file.api.IUserService;
|
||||
@ -15,8 +15,6 @@ import io.jsonwebtoken.Claims;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.crypto.hash.SimpleHash;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
@ -1,10 +1,9 @@
|
||||
package com.qiwenshare.file.util;
|
||||
|
||||
import com.qiwenshare.common.cbb.CollectUtil;
|
||||
import com.qiwenshare.common.cbb.DateUtil;
|
||||
import com.qiwenshare.common.util.CollectUtil;
|
||||
import com.qiwenshare.common.util.DateUtil;
|
||||
import com.qiwenshare.file.domain.OperationLogBean;
|
||||
import com.qiwenshare.file.domain.UserBean;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
|
@ -49,10 +49,10 @@ mybatis-plus.mapper-locations=classpath:mybatis/mapper/*.xml
|
||||
mybatis-plus.configuration.map-underscore-to-camel-case=false
|
||||
mybatis-plus.global-config.banner=false
|
||||
|
||||
qiwen-file.remote-login=false
|
||||
qiwen-file.share-mode=false
|
||||
|
||||
qiwen-file.storage-type=0
|
||||
qiwen-file.cache-mode=0
|
||||
|
||||
#是否启用阿里云oss
|
||||
#qiwen-file.aliyun.oss.enabled=false
|
||||
|
Loading…
Reference in New Issue
Block a user