基础代码优化
This commit is contained in:
parent
9d12434de4
commit
fc77d48251
@ -12,6 +12,7 @@ public class QiwenFileConfig {
|
|||||||
private boolean shareMode;
|
private boolean shareMode;
|
||||||
|
|
||||||
private String storageType;
|
private String storageType;
|
||||||
|
private String cacheMode;
|
||||||
|
|
||||||
private AliyunConfig aliyun = new AliyunConfig();
|
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 class NotSameFileExpection extends Exception {
|
||||||
public NotSameFileExpection() {
|
public NotSameFileExpection() {
|
@ -1,9 +1,14 @@
|
|||||||
package com.qiwenshare.common.factory;
|
package com.qiwenshare.common.factory;
|
||||||
|
|
||||||
import com.qiwenshare.common.download.Downloader;
|
|
||||||
import com.qiwenshare.common.download.product.AliyunOSSDownloader;
|
import com.qiwenshare.common.operation.delete.Deleter;
|
||||||
import com.qiwenshare.common.upload.product.AliyunOSSUploader;
|
import com.qiwenshare.common.operation.delete.product.AliyunOSSDeleter;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
|
||||||
|
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 org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -14,6 +19,8 @@ public class AliyunOSSOperationFactory implements FileOperationFactory {
|
|||||||
AliyunOSSUploader aliyunOSSUploader;
|
AliyunOSSUploader aliyunOSSUploader;
|
||||||
@Resource
|
@Resource
|
||||||
AliyunOSSDownloader aliyunOSSDownloader;
|
AliyunOSSDownloader aliyunOSSDownloader;
|
||||||
|
@Resource
|
||||||
|
AliyunOSSDeleter aliyunOSSDeleter;
|
||||||
@Override
|
@Override
|
||||||
public Uploader getUploader() {
|
public Uploader getUploader() {
|
||||||
return aliyunOSSUploader;
|
return aliyunOSSUploader;
|
||||||
@ -24,4 +31,9 @@ public class AliyunOSSOperationFactory implements FileOperationFactory {
|
|||||||
return aliyunOSSDownloader;
|
return aliyunOSSDownloader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Deleter getDeleter() {
|
||||||
|
return aliyunOSSDeleter;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package com.qiwenshare.common.factory;
|
package com.qiwenshare.common.factory;
|
||||||
|
|
||||||
import com.qiwenshare.common.download.Downloader;
|
import com.qiwenshare.common.operation.delete.Deleter;
|
||||||
import com.qiwenshare.common.download.product.FastDFSDownloader;
|
import com.qiwenshare.common.operation.delete.product.FastDFSDeleter;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
import com.qiwenshare.common.upload.product.FastDFSUploader;
|
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 org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -11,12 +13,12 @@ import javax.annotation.Resource;
|
|||||||
@Component
|
@Component
|
||||||
public class FastDFSOperationFactory implements FileOperationFactory {
|
public class FastDFSOperationFactory implements FileOperationFactory {
|
||||||
|
|
||||||
// @Resource
|
|
||||||
// AppendFileStorageClient defaultAppendFileStorageClient;
|
|
||||||
@Resource
|
@Resource
|
||||||
FastDFSUploader fastDFSUploader;
|
FastDFSUploader fastDFSUploader;
|
||||||
@Resource
|
@Resource
|
||||||
FastDFSDownloader fastDFSDownloader;
|
FastDFSDownloader fastDFSDownloader;
|
||||||
|
@Resource
|
||||||
|
FastDFSDeleter fastDFSDeleter;
|
||||||
@Override
|
@Override
|
||||||
public Uploader getUploader() {
|
public Uploader getUploader() {
|
||||||
return fastDFSUploader;
|
return fastDFSUploader;
|
||||||
@ -27,9 +29,10 @@ public class FastDFSOperationFactory implements FileOperationFactory {
|
|||||||
return fastDFSDownloader;
|
return fastDFSDownloader;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @Override
|
@Override
|
||||||
// public Uploader getUploader(UploadFile uploadFile) {
|
public Deleter getDeleter() {
|
||||||
// return new FastDFSUploader(uploadFile, defaultAppendFileStorageClient);
|
return fastDFSDeleter;
|
||||||
// }
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
package com.qiwenshare.common.factory;
|
package com.qiwenshare.common.factory;
|
||||||
|
|
||||||
import com.qiwenshare.common.download.Downloader;
|
import com.qiwenshare.common.operation.delete.Deleter;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
|
import com.qiwenshare.common.operation.upload.Uploader;
|
||||||
|
|
||||||
public interface FileOperationFactory {
|
public interface FileOperationFactory {
|
||||||
Uploader getUploader();
|
Uploader getUploader();
|
||||||
Downloader getDownloader();
|
Downloader getDownloader();
|
||||||
// Uploader getUploader(UploadFile uploadFile);
|
Deleter getDeleter();
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
package com.qiwenshare.common.factory;
|
package com.qiwenshare.common.factory;
|
||||||
|
|
||||||
import com.qiwenshare.common.download.Downloader;
|
import com.qiwenshare.common.operation.delete.Deleter;
|
||||||
import com.qiwenshare.common.download.product.LocalStorageDownloader;
|
import com.qiwenshare.common.operation.delete.product.LocalStorageDeleter;
|
||||||
import com.qiwenshare.common.upload.product.LocalStorageUploader;
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
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 org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -12,12 +14,14 @@ import javax.annotation.Resource;
|
|||||||
public class LocalStorageOperationFactory implements FileOperationFactory{
|
public class LocalStorageOperationFactory implements FileOperationFactory{
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
LocalStorageUploader ChunkUploader;
|
LocalStorageUploader localStorageUploader;
|
||||||
@Resource
|
@Resource
|
||||||
LocalStorageDownloader localStorageDownloader;
|
LocalStorageDownloader localStorageDownloader;
|
||||||
|
@Resource
|
||||||
|
LocalStorageDeleter localStorageDeleter;
|
||||||
@Override
|
@Override
|
||||||
public Uploader getUploader() {
|
public Uploader getUploader() {
|
||||||
return ChunkUploader;
|
return localStorageUploader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -25,5 +29,10 @@ public class LocalStorageOperationFactory implements FileOperationFactory{
|
|||||||
return localStorageDownloader;
|
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.DownloadFile;
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public abstract class Downloader {
|
public abstract class Downloader {
|
||||||
public abstract void download(HttpServletResponse httpServletResponse, DownloadFile uploadFile);
|
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.OSS;
|
||||||
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
import com.aliyun.oss.model.OSSObject;
|
import com.aliyun.oss.model.OSSObject;
|
||||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
|
||||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||||
|
import com.qiwenshare.common.domain.AliyunOSS;
|
||||||
import com.qiwenshare.common.domain.DownloadFile;
|
import com.qiwenshare.common.domain.DownloadFile;
|
||||||
import com.qiwenshare.common.download.Downloader;
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
import com.qiwenshare.common.oss.AliyunOSSDownload;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -23,10 +22,11 @@ public class AliyunOSSDownloader extends Downloader {
|
|||||||
QiwenFileConfig qiwenFileConfig;
|
QiwenFileConfig qiwenFileConfig;
|
||||||
@Override
|
@Override
|
||||||
public void download(HttpServletResponse httpServletResponse, DownloadFile downloadFile) {
|
public void download(HttpServletResponse httpServletResponse, DownloadFile downloadFile) {
|
||||||
|
|
||||||
BufferedInputStream bis = null;
|
BufferedInputStream bis = null;
|
||||||
byte[] buffer = new byte[1024];
|
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());
|
OSSObject ossObject = ossClient.getObject(qiwenFileConfig.getAliyun().getOss().getBucketName(), downloadFile.getTimeStampName());
|
||||||
InputStream inputStream = ossObject.getObjectContent();
|
InputStream inputStream = ossObject.getObjectContent();
|
||||||
try {
|
try {
|
||||||
@ -51,4 +51,12 @@ public class AliyunOSSDownloader extends Downloader {
|
|||||||
}
|
}
|
||||||
ossClient.shutdown();
|
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.proto.storage.DownloadByteArray;
|
||||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
||||||
import com.qiwenshare.common.domain.DownloadFile;
|
import com.qiwenshare.common.domain.DownloadFile;
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
import com.qiwenshare.common.download.Downloader;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
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.domain.DownloadFile;
|
||||||
import com.qiwenshare.common.download.Downloader;
|
|
||||||
import com.qiwenshare.common.operation.FileOperation;
|
import com.qiwenshare.common.operation.FileOperation;
|
||||||
|
import com.qiwenshare.common.operation.download.Downloader;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
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.domain.UploadFile;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -24,14 +23,11 @@ public abstract class Uploader {
|
|||||||
// 文件大小限制,单位KB
|
// 文件大小限制,单位KB
|
||||||
public final int maxSize = 10000000;
|
public final int maxSize = 10000000;
|
||||||
|
|
||||||
// protected StandardMultipartHttpServletRequest request = null;
|
|
||||||
|
|
||||||
public abstract List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile);
|
public abstract List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据字符串创建本地目录 并按照日期建立子目录返回
|
* 根据字符串创建本地目录 并按照日期建立子目录返回
|
||||||
*
|
*
|
||||||
* @param path
|
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected String getSaveFilePath() {
|
protected String getSaveFilePath() {
|
||||||
@ -73,7 +69,6 @@ public abstract class Uploader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
public synchronized boolean checkUploadStatus(UploadFile param, File confFile) throws IOException {
|
||||||
//File confFile = new File(savePath, timeStampName + ".conf");
|
|
||||||
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
|
||||||
//设置文件长度
|
//设置文件长度
|
||||||
confAccessFile.setLength(param.getTotalChunks());
|
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.alibaba.fastjson.JSON;
|
||||||
import com.aliyun.oss.OSS;
|
import com.aliyun.oss.OSS;
|
||||||
import com.aliyun.oss.OSSClientBuilder;
|
import com.aliyun.oss.OSSClientBuilder;
|
||||||
import com.aliyun.oss.model.*;
|
import com.aliyun.oss.model.*;
|
||||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.common.domain.AliyunOSS;
|
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.domain.UploadFile;
|
||||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
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.FileUtil;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@ -24,7 +23,6 @@ import org.springframework.web.multipart.support.StandardMultipartHttpServletReq
|
|||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@Component
|
@Component
|
||||||
@ -32,11 +30,7 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
|
private static final Logger logger = LoggerFactory.getLogger(AliyunOSSUploader.class);
|
||||||
@Resource
|
@Resource
|
||||||
QiwenFileConfig qiwenFileConfig;
|
QiwenFileConfig qiwenFileConfig;
|
||||||
// private UploadFile uploadFile;
|
|
||||||
// private String endpoint;
|
|
||||||
// private String accessKeyId;
|
|
||||||
// private String accessKeySecret;
|
|
||||||
// private String bucketName;
|
|
||||||
|
|
||||||
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
|
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
|
||||||
public static Map<String, List<PartETag>> partETagsMap = new HashMap<String, List<PartETag>>();
|
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 static Map<String, String> timeStampNameMap = new HashMap<>();
|
||||||
|
|
||||||
public AliyunOSSUploader() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// public AliyunOSSUploader(UploadFile uploadFile) {
|
|
||||||
// this.uploadFile = uploadFile;
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UploadFile> upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
|
public List<UploadFile> upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
|
||||||
logger.info("开始上传upload");
|
logger.info("开始上传upload");
|
||||||
|
|
||||||
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
||||||
StandardMultipartHttpServletRequest request = (StandardMultipartHttpServletRequest) httpServletRequest;
|
StandardMultipartHttpServletRequest request = (StandardMultipartHttpServletRequest) httpServletRequest;
|
||||||
// AliyunOSS aliyunOSS = (AliyunOSS) request.getAttribute("oss");
|
|
||||||
//
|
|
||||||
// endpoint = aliyunOSS.getEndpoint();
|
|
||||||
// accessKeyId = aliyunOSS.getAccessKeyId();
|
|
||||||
// accessKeySecret = aliyunOSS.getAccessKeySecret();
|
|
||||||
// bucketName = aliyunOSS.getBucketName();
|
|
||||||
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
|
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
|
||||||
if (!isMultipart) {
|
if (!isMultipart) {
|
||||||
throw new UploadGeneralException("未包含文件上传域");
|
throw new UploadGeneralException("未包含文件上传域");
|
||||||
// UploadFile uploadFile = new UploadFile();
|
|
||||||
// uploadFile.setSuccess(0);
|
|
||||||
// uploadFile.setMessage("未包含文件上传域");
|
|
||||||
// saveUploadFileList.add(uploadFile);
|
|
||||||
// return saveUploadFileList;
|
|
||||||
}
|
}
|
||||||
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
|
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
|
||||||
String savePath = getSaveFilePath();
|
String savePath = getSaveFilePath();
|
||||||
dff.setRepository(new File(savePath));
|
dff.setRepository(new File(savePath));
|
||||||
|
|
||||||
ServletFileUpload sfu = new ServletFileUpload(dff);//2、创建文件上传解析器
|
ServletFileUpload sfu = new ServletFileUpload(dff);
|
||||||
sfu.setSizeMax(this.maxSize * 1024L);
|
sfu.setSizeMax(this.maxSize * 1024L);
|
||||||
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
|
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
|
||||||
Iterator<String> iter = request.getFileNames();
|
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.domain.StorePath;
|
||||||
import com.github.tobato.fastdfs.service.AppendFileStorageClient;
|
import com.github.tobato.fastdfs.service.AppendFileStorageClient;
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.domain.UploadFile;
|
||||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
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.FileUtil;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -25,27 +25,11 @@ public class FastDFSUploader extends Uploader {
|
|||||||
@Resource
|
@Resource
|
||||||
AppendFileStorageClient defaultAppendFileStorageClient;
|
AppendFileStorageClient defaultAppendFileStorageClient;
|
||||||
|
|
||||||
// UploadFile uploadFile;
|
|
||||||
|
|
||||||
private static Map<String, Integer> CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
|
private static Map<String, Integer> CURRENT_UPLOAD_CHUNK_NUMBER = new HashMap<>();
|
||||||
private static Map<String, Long> UPLOADED_SIZE = new HashMap<>();
|
private static Map<String, Long> UPLOADED_SIZE = new HashMap<>();
|
||||||
private static Map<String, String> STORE_PATH = new HashMap<>();
|
private static Map<String, String> STORE_PATH = new HashMap<>();
|
||||||
private static Map<String, Object> LOCK_MAP = 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
|
@Override
|
||||||
public List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile) {
|
public List<UploadFile> upload(HttpServletRequest request, UploadFile uploadFile) {
|
||||||
log.info("开始上传upload");
|
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.domain.UploadFile;
|
||||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
import com.qiwenshare.common.exception.UploadGeneralException;
|
||||||
import com.qiwenshare.common.operation.ImageOperation;
|
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.FileUtil;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
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 io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统一结果返回
|
* 统一结果返回
|
||||||
* @param <T>
|
* @param <T>
|
@ -1,4 +1,4 @@
|
|||||||
package com.qiwenshare.common.cbb;
|
package com.qiwenshare.common.result;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package com.qiwenshare.common.cbb;
|
package com.qiwenshare.common.util;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
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.DateFormat;
|
||||||
import java.text.ParseException;
|
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;
|
package com.qiwenshare.file.advice;
|
||||||
|
|
||||||
import com.qiwenshare.common.cbb.ResultCodeEnum;
|
import com.qiwenshare.common.result.ResultCodeEnum;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.qiwenshare.file.advice;
|
package com.qiwenshare.file.advice;
|
||||||
|
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.result.RestResult;
|
||||||
import com.qiwenshare.common.cbb.ResultCodeEnum;
|
import com.qiwenshare.common.result.ResultCodeEnum;
|
||||||
import com.qiwenshare.common.exception.UploadGeneralException;
|
import com.qiwenshare.common.exception.UploadGeneralException;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.http.HttpStatus;
|
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.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||||
import org.springframework.web.client.HttpClientErrorException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 该注解为统一异常处理的核心
|
* 该注解为统一异常处理的核心
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.qiwenshare.file.aop;
|
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.anno.MyLog;
|
||||||
import com.qiwenshare.file.api.IOperationLogService;
|
import com.qiwenshare.file.api.IOperationLogService;
|
||||||
import com.qiwenshare.file.api.IUserService;
|
import com.qiwenshare.file.api.IUserService;
|
||||||
|
@ -19,7 +19,7 @@ public interface IFileService extends IService<FileBean> {
|
|||||||
|
|
||||||
// List<FileBean> selectFileListByPath(FileBean fileBean);
|
// List<FileBean> selectFileListByPath(FileBean fileBean);
|
||||||
|
|
||||||
void deleteLocalFile(FileBean fileBean);
|
// void deleteLocalFile(FileBean fileBean);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.qiwenshare.file.api;
|
package com.qiwenshare.file.api;
|
||||||
|
|
||||||
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
import com.qiwenshare.file.domain.StorageBean;
|
import com.qiwenshare.file.domain.StorageBean;
|
||||||
import com.qiwenshare.file.dto.DownloadFileDTO;
|
import com.qiwenshare.file.dto.DownloadFileDTO;
|
||||||
import com.qiwenshare.file.dto.UploadFileDTO;
|
import com.qiwenshare.file.dto.UploadFileDTO;
|
||||||
@ -21,7 +22,7 @@ public interface IFiletransferService {
|
|||||||
void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId);
|
void uploadFile(HttpServletRequest request, UploadFileDTO UploadFileDto, Long userId);
|
||||||
|
|
||||||
void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO);
|
void downloadFile(HttpServletResponse httpServletResponse, DownloadFileDTO downloadFileDTO);
|
||||||
|
void deleteFile(FileBean fileBean);
|
||||||
StorageBean selectStorageBean(StorageBean storageBean);
|
StorageBean selectStorageBean(StorageBean storageBean);
|
||||||
|
|
||||||
void insertStorageBean(StorageBean storageBean);
|
void insertStorageBean(StorageBean storageBean);
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
package com.qiwenshare.file.api;
|
package com.qiwenshare.file.api;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
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 com.qiwenshare.file.domain.UserBean;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface IUserService extends IService<UserBean> {
|
public interface IUserService extends IService<UserBean> {
|
||||||
|
|
||||||
UserBean getUserBeanByToken(String token);
|
UserBean getUserBeanByToken(String token);
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package com.qiwenshare.file.controller;
|
package com.qiwenshare.file.controller;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
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.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.util.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.result.RestResult;
|
||||||
|
import com.qiwenshare.common.domain.AliyunOSS;
|
||||||
import com.qiwenshare.common.operation.FileOperation;
|
import com.qiwenshare.common.operation.FileOperation;
|
||||||
import com.qiwenshare.common.oss.AliyunOSSRename;
|
|
||||||
import com.qiwenshare.common.util.FileUtil;
|
import com.qiwenshare.common.util.FileUtil;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import com.qiwenshare.file.anno.MyLog;
|
import com.qiwenshare.file.anno.MyLog;
|
||||||
@ -168,7 +172,7 @@ public class FileController {
|
|||||||
String fileUrl = file.getFileUrl();
|
String fileUrl = file.getFileUrl();
|
||||||
String newFileUrl = fileUrl.replace(userFile.getFileName(), renameFileDto.getFileName());
|
String newFileUrl = fileUrl.replace(userFile.getFileName(), renameFileDto.getFileName());
|
||||||
|
|
||||||
AliyunOSSRename.rename(qiwenFileConfig.getAliyun().getOss(),
|
rename(qiwenFileConfig.getAliyun().getOss(),
|
||||||
fileUrl.substring(1),
|
fileUrl.substring(1),
|
||||||
newFileUrl.substring(1));
|
newFileUrl.substring(1));
|
||||||
LambdaUpdateWrapper<FileBean> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
LambdaUpdateWrapper<FileBean> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
|
||||||
@ -196,6 +200,27 @@ public class FileController {
|
|||||||
return RestResult.success();
|
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"})
|
@Operation(summary = "获取文件列表", description = "用来做前台列表展示", tags = {"file"})
|
||||||
@RequestMapping(value = "/getfilelist", method = RequestMethod.GET)
|
@RequestMapping(value = "/getfilelist", method = RequestMethod.GET)
|
||||||
|
@ -1,14 +1,11 @@
|
|||||||
package com.qiwenshare.file.controller;
|
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.proto.storage.DownloadByteArray;
|
||||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
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.operation.FileOperation;
|
||||||
import com.qiwenshare.common.oss.AliyunOSSDownload;
|
|
||||||
import com.qiwenshare.common.util.FileUtil;
|
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.common.util.PathUtil;
|
||||||
import com.qiwenshare.file.anno.MyLog;
|
import com.qiwenshare.file.anno.MyLog;
|
||||||
import com.qiwenshare.file.api.IFileService;
|
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){
|
public void fastFDSDownload(HttpServletResponse response, FileBean fileBean){
|
||||||
|
@ -3,8 +3,8 @@ package com.qiwenshare.file.controller;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.util.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.result.RestResult;
|
||||||
import com.qiwenshare.common.util.PathUtil;
|
import com.qiwenshare.common.util.PathUtil;
|
||||||
import com.qiwenshare.file.anno.MyLog;
|
import com.qiwenshare.file.anno.MyLog;
|
||||||
import com.qiwenshare.file.api.IRecoveryFileService;
|
import com.qiwenshare.file.api.IRecoveryFileService;
|
||||||
|
@ -4,8 +4,8 @@ import cn.hutool.core.bean.BeanUtil;
|
|||||||
import cn.hutool.core.util.RandomUtil;
|
import cn.hutool.core.util.RandomUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.util.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.result.RestResult;
|
||||||
import com.qiwenshare.file.anno.MyLog;
|
import com.qiwenshare.file.anno.MyLog;
|
||||||
import com.qiwenshare.file.api.IShareService;
|
import com.qiwenshare.file.api.IShareService;
|
||||||
import com.qiwenshare.file.api.IUserService;
|
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.FileBean;
|
||||||
import com.qiwenshare.file.domain.UserFile;
|
import com.qiwenshare.file.domain.UserFile;
|
||||||
import com.qiwenshare.file.service.FileService;
|
import com.qiwenshare.file.service.FileService;
|
||||||
|
import com.qiwenshare.file.service.FiletransferService;
|
||||||
import com.qiwenshare.file.service.UserFileService;
|
import com.qiwenshare.file.service.UserFileService;
|
||||||
import com.qiwenshare.file.service.UserService;
|
import com.qiwenshare.file.service.UserService;
|
||||||
import com.qiwenshare.file.vo.file.FileListVo;
|
import com.qiwenshare.file.vo.file.FileListVo;
|
||||||
@ -30,6 +31,8 @@ public class TaskController {
|
|||||||
FileService fileService;
|
FileService fileService;
|
||||||
@Resource
|
@Resource
|
||||||
UserFileService userFileService;
|
UserFileService userFileService;
|
||||||
|
@Resource
|
||||||
|
FiletransferService filetransferService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private IElasticSearchService elasticSearchService;
|
private IElasticSearchService elasticSearchService;
|
||||||
|
|
||||||
@ -43,7 +46,7 @@ public class TaskController {
|
|||||||
for (int i = 0; i < fileBeanList.size(); i++) {
|
for (int i = 0; i < fileBeanList.size(); i++) {
|
||||||
FileBean fileBean = fileBeanList.get(i);
|
FileBean fileBean = fileBeanList.get(i);
|
||||||
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
||||||
fileService.deleteLocalFile(fileBean);
|
filetransferService.deleteFile(fileBean);
|
||||||
fileService.removeById(fileBean.getFileId());
|
fileService.removeById(fileBean.getFileId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ package com.qiwenshare.file.controller;
|
|||||||
|
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
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.domain.AliyunOSS;
|
||||||
import com.qiwenshare.common.util.JjwtUtil;
|
import com.qiwenshare.common.util.JjwtUtil;
|
||||||
import com.qiwenshare.file.anno.MyLog;
|
import com.qiwenshare.file.anno.MyLog;
|
||||||
|
@ -1,12 +1,7 @@
|
|||||||
package com.qiwenshare.file.service;
|
package com.qiwenshare.file.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
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.file.api.IFileService;
|
||||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.file.domain.FileBean;
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
@ -82,31 +77,31 @@ public class FileService extends ServiceImpl<FileMapper, FileBean> implements IF
|
|||||||
// .orderByDesc(FileBean::getIsDir);
|
// .orderByDesc(FileBean::getIsDir);
|
||||||
// return fileMapper.selectList(lambdaQueryWrapper);
|
// return fileMapper.selectList(lambdaQueryWrapper);
|
||||||
// }
|
// }
|
||||||
@Override
|
// @Override
|
||||||
public void deleteLocalFile(FileBean fileBean) {
|
// public void deleteLocalFile(FileBean fileBean) {
|
||||||
log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
// log.info("删除本地文件:" + JSON.toJSONString(fileBean));
|
||||||
//删除服务器文件
|
// //删除服务器文件
|
||||||
if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){
|
// if (fileBean.getFileUrl() != null && fileBean.getFileUrl().indexOf("upload") != -1){
|
||||||
if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
|
// if (fileBean.getIsOSS() != null && fileBean.getIsOSS() == 1) {
|
||||||
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||||
} else if (fileBean.getStorageType() == 0) {
|
// } else if (fileBean.getStorageType() == 0) {
|
||||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||||
if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
// if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
||||||
}
|
// }
|
||||||
} else if (fileBean.getStorageType() == 1) {
|
// } else if (fileBean.getStorageType() == 1) {
|
||||||
AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
// AliyunOSSDelete.deleteObject(qiwenFileConfig.getAliyun().getOss(), fileBean.getFileUrl().substring(1));
|
||||||
} else if (fileBean.getStorageType() == 2){
|
// } else if (fileBean.getStorageType() == 2){
|
||||||
fastFileStorageClient.deleteFile(fileBean.getFileUrl());
|
// fastFileStorageClient.deleteFile(fileBean.getFileUrl());
|
||||||
|
//
|
||||||
} else {
|
// } else {
|
||||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
// FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl());
|
||||||
if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
// if (FileUtil.isImageFile(FileUtil.getFileExtendName(fileBean.getFileUrl()))) {
|
||||||
FileOperation.deleteFile(PathUtil.getStaticPath() + fileBean.getFileUrl().replace(fileBean.getTimeStampName(), fileBean.getTimeStampName() + "_min"));
|
// 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 cn.hutool.core.bean.BeanUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
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.DownloadFile;
|
||||||
import com.qiwenshare.common.domain.UploadFile;
|
import com.qiwenshare.common.domain.UploadFile;
|
||||||
//import com.qiwenshare.common.factory.FileOperationFactory;
|
//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.factory.FileOperationFactory;
|
||||||
import com.qiwenshare.common.upload.Uploader;
|
import com.qiwenshare.common.operation.upload.Uploader;
|
||||||
|
|
||||||
import com.qiwenshare.file.api.IFiletransferService;
|
import com.qiwenshare.file.api.IFiletransferService;
|
||||||
|
|
||||||
@ -148,6 +150,24 @@ public class FiletransferService implements IFiletransferService {
|
|||||||
downloader.download(httpServletResponse, uploadFile);
|
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
|
@Override
|
||||||
public StorageBean selectStorageBean(StorageBean storageBean) {
|
public StorageBean selectStorageBean(StorageBean storageBean) {
|
||||||
LambdaQueryWrapper<StorageBean> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
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.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.common.util.PathUtil;
|
||||||
import com.qiwenshare.file.api.IRecoveryFileService;
|
import com.qiwenshare.file.api.IRecoveryFileService;
|
||||||
import com.qiwenshare.file.domain.FileBean;
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
import com.qiwenshare.file.domain.RecoveryFile;
|
import com.qiwenshare.file.domain.RecoveryFile;
|
||||||
import com.qiwenshare.file.domain.UserBean;
|
|
||||||
import com.qiwenshare.file.domain.UserFile;
|
import com.qiwenshare.file.domain.UserFile;
|
||||||
import com.qiwenshare.file.mapper.FileMapper;
|
import com.qiwenshare.file.mapper.FileMapper;
|
||||||
import com.qiwenshare.file.mapper.RecoveryFileMapper;
|
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.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
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.file.api.IUserFileService;
|
||||||
import com.qiwenshare.common.config.QiwenFileConfig;
|
import com.qiwenshare.common.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.file.domain.FileBean;
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
|
@ -3,8 +3,8 @@ package com.qiwenshare.file.service;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.util.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.result.RestResult;
|
||||||
import com.qiwenshare.common.util.JjwtUtil;
|
import com.qiwenshare.common.util.JjwtUtil;
|
||||||
import com.qiwenshare.common.util.PasswordUtil;
|
import com.qiwenshare.common.util.PasswordUtil;
|
||||||
import com.qiwenshare.file.api.IUserService;
|
import com.qiwenshare.file.api.IUserService;
|
||||||
@ -15,8 +15,6 @@ import io.jsonwebtoken.Claims;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.shiro.crypto.hash.SimpleHash;
|
import org.apache.shiro.crypto.hash.SimpleHash;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
package com.qiwenshare.file.util;
|
package com.qiwenshare.file.util;
|
||||||
|
|
||||||
import com.qiwenshare.common.cbb.CollectUtil;
|
import com.qiwenshare.common.util.CollectUtil;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.util.DateUtil;
|
||||||
import com.qiwenshare.file.domain.OperationLogBean;
|
import com.qiwenshare.file.domain.OperationLogBean;
|
||||||
import com.qiwenshare.file.domain.UserBean;
|
import com.qiwenshare.file.domain.UserBean;
|
||||||
import org.apache.shiro.SecurityUtils;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
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.configuration.map-underscore-to-camel-case=false
|
||||||
mybatis-plus.global-config.banner=false
|
mybatis-plus.global-config.banner=false
|
||||||
|
|
||||||
qiwen-file.remote-login=false
|
|
||||||
qiwen-file.share-mode=false
|
qiwen-file.share-mode=false
|
||||||
|
|
||||||
qiwen-file.storage-type=0
|
qiwen-file.storage-type=0
|
||||||
|
qiwen-file.cache-mode=0
|
||||||
|
|
||||||
#是否启用阿里云oss
|
#是否启用阿里云oss
|
||||||
#qiwen-file.aliyun.oss.enabled=false
|
#qiwen-file.aliyun.oss.enabled=false
|
||||||
|
Loading…
Reference in New Issue
Block a user