commit
ddfc957876
@ -11,7 +11,6 @@ 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;
|
||||||
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
||||||
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
import org.apache.commons.fileupload.servlet.ServletFileUpload;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -23,7 +22,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.InputStream;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@Component
|
@Component
|
||||||
public class AliyunOSSUploader extends Uploader {
|
public class AliyunOSSUploader extends Uploader {
|
||||||
@ -31,15 +29,12 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
@Resource
|
@Resource
|
||||||
QiwenFileConfig qiwenFileConfig;
|
QiwenFileConfig qiwenFileConfig;
|
||||||
|
|
||||||
|
|
||||||
// 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>>();
|
||||||
public static Map<String, UploadFileInfo> uploadPartRequestMap = new HashMap<>();
|
public static Map<String, UploadFileInfo> uploadPartRequestMap = new HashMap<>();
|
||||||
|
|
||||||
public static Map<String, OSS> ossMap = new HashMap<>();
|
public static Map<String, OSS> ossMap = new HashMap<>();
|
||||||
|
|
||||||
public static Map<String, String> timeStampNameMap = new HashMap<>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<UploadFile> upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
|
public List<UploadFile> upload(HttpServletRequest httpServletRequest, UploadFile uploadFile) {
|
||||||
logger.info("开始上传upload");
|
logger.info("开始上传upload");
|
||||||
@ -51,25 +46,19 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
if (!isMultipart) {
|
if (!isMultipart) {
|
||||||
throw new UploadGeneralException("未包含文件上传域");
|
throw new UploadGeneralException("未包含文件上传域");
|
||||||
}
|
}
|
||||||
DiskFileItemFactory dff = new DiskFileItemFactory();//1、创建工厂
|
|
||||||
String savePath = getSaveFilePath();
|
|
||||||
dff.setRepository(new File(savePath));
|
|
||||||
|
|
||||||
ServletFileUpload sfu = new ServletFileUpload(dff);
|
|
||||||
sfu.setSizeMax(this.maxSize * 1024L);
|
|
||||||
sfu.setHeaderEncoding("utf-8");//3、解决文件名的中文乱码
|
|
||||||
Iterator<String> iter = request.getFileNames();
|
Iterator<String> iter = request.getFileNames();
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
|
|
||||||
saveUploadFileList = doUpload(request, savePath, iter, uploadFile);
|
saveUploadFileList = doUpload(request, iter, uploadFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
logger.info("结束上传");
|
logger.info("结束上传");
|
||||||
return saveUploadFileList;
|
return saveUploadFileList;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<UploadFile> doUpload(StandardMultipartHttpServletRequest standardMultipartHttpServletRequest, String savePath, Iterator<String> iter, UploadFile uploadFile) {
|
private List<UploadFile> doUpload(StandardMultipartHttpServletRequest standardMultipartHttpServletRequest, Iterator<String> iter, UploadFile uploadFile) {
|
||||||
|
String savePath = getSaveFilePath();
|
||||||
OSS ossClient = getClient(uploadFile);
|
OSS ossClient = getClient(uploadFile);
|
||||||
|
|
||||||
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
List<UploadFile> saveUploadFileList = new ArrayList<>();
|
||||||
@ -79,9 +68,7 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
|
|
||||||
String timeStampName = getTimeStampName();
|
String timeStampName = getTimeStampName();
|
||||||
String originalName = multipartfile.getOriginalFilename();
|
String originalName = multipartfile.getOriginalFilename();
|
||||||
|
|
||||||
String fileName = getFileName(originalName);
|
String fileName = getFileName(originalName);
|
||||||
|
|
||||||
String fileType = FileUtil.getFileExtendName(originalName);
|
String fileType = FileUtil.getFileExtendName(originalName);
|
||||||
uploadFile.setFileName(fileName);
|
uploadFile.setFileName(fileName);
|
||||||
uploadFile.setFileType(fileType);
|
uploadFile.setFileType(fileType);
|
||||||
@ -111,16 +98,10 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
uploadPartRequest.setBucketName(uploadFileInfo.getBucketName());
|
uploadPartRequest.setBucketName(uploadFileInfo.getBucketName());
|
||||||
uploadPartRequest.setKey(uploadFileInfo.getKey());
|
uploadPartRequest.setKey(uploadFileInfo.getKey());
|
||||||
uploadPartRequest.setUploadId(uploadFileInfo.getUploadId());
|
uploadPartRequest.setUploadId(uploadFileInfo.getUploadId());
|
||||||
InputStream instream = multipartfile.getInputStream();
|
uploadPartRequest.setInputStream(multipartfile.getInputStream());
|
||||||
logger.info("流大小" + instream.available());
|
|
||||||
long position = (uploadFile.getChunkNumber() - 1) * uploadFile.getCurrentChunkSize();
|
|
||||||
logger.info("偏移量:" + position);
|
|
||||||
// instream.skip(position);
|
|
||||||
uploadPartRequest.setInputStream(instream);
|
|
||||||
uploadPartRequest.setPartSize(uploadFile.getCurrentChunkSize());
|
uploadPartRequest.setPartSize(uploadFile.getCurrentChunkSize());
|
||||||
uploadPartRequest.setPartNumber(uploadFile.getChunkNumber());
|
uploadPartRequest.setPartNumber(uploadFile.getChunkNumber());
|
||||||
logger.info(JSON.toJSONString(uploadPartRequest));
|
logger.info(JSON.toJSONString(uploadPartRequest));
|
||||||
// uploadPartRequest.setUseChunkEncoding(true);
|
|
||||||
|
|
||||||
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
|
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
|
||||||
synchronized (AliyunOSSUploader.class) {
|
synchronized (AliyunOSSUploader.class) {
|
||||||
@ -139,7 +120,7 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
logger.info("分片上传完成");
|
logger.info("分片上传完成");
|
||||||
completeMultipartUpload(uploadFile);
|
completeMultipartUpload(uploadFile);
|
||||||
|
|
||||||
uploadFile.setUrl(ossFilePath);
|
uploadFile.setUrl("/" + uploadPartRequestMap.get(uploadFile.getIdentifier()).getKey());
|
||||||
uploadFile.setSuccess(1);
|
uploadFile.setSuccess(1);
|
||||||
uploadFile.setMessage("上传成功");
|
uploadFile.setMessage("上传成功");
|
||||||
} else {
|
} else {
|
||||||
@ -220,19 +201,6 @@ public class AliyunOSSUploader extends Uploader {
|
|||||||
getClient(uploadFile).abortMultipartUpload(abortMultipartUploadRequest);
|
getClient(uploadFile).abortMultipartUpload(abortMultipartUploadRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected synchronized String getTimeStampName(UploadFile uploadFile){
|
|
||||||
String timeStampName;
|
|
||||||
|
|
||||||
if (StringUtils.isEmpty(timeStampNameMap.get(uploadFile.getIdentifier()))) {
|
|
||||||
timeStampName = super.getTimeStampName();
|
|
||||||
timeStampNameMap.put(uploadFile.getIdentifier(), timeStampName);
|
|
||||||
} else {
|
|
||||||
timeStampName = timeStampNameMap.get(uploadFile.getIdentifier());
|
|
||||||
}
|
|
||||||
return timeStampName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized OSS getClient(UploadFile uploadFile) {
|
private synchronized OSS getClient(UploadFile uploadFile) {
|
||||||
OSS ossClient = null;
|
OSS ossClient = null;
|
||||||
if (ossMap.get(uploadFile.getIdentifier()) == null) {
|
if (ossMap.get(uploadFile.getIdentifier()) == null) {
|
||||||
|
@ -7,15 +7,9 @@ import lombok.Data;
|
|||||||
@Schema(name = "移动文件DTO",required = true)
|
@Schema(name = "移动文件DTO",required = true)
|
||||||
public class MoveFileDTO {
|
public class MoveFileDTO {
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件路径
|
|
||||||
*/
|
|
||||||
@Schema(description = "文件路径")
|
@Schema(description = "文件路径")
|
||||||
private String filePath;
|
private String filePath;
|
||||||
|
|
||||||
/**
|
|
||||||
* 文件名
|
|
||||||
*/
|
|
||||||
@Schema(description = "文件名")
|
@Schema(description = "文件名")
|
||||||
private String fileName;
|
private String fileName;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user