controller
private static final String PATH = "fileUpload/" ; @PostMapping ( "/initSharding" ) public AjaxResult testInitControl ( @RequestBody ShardingInfoDo param) { ShardingInfoDo result = new ShardingInfoDo ( ) ; String taskId = UUID . randomUUID ( ) . toString ( ) . replaceAll ( "-" , "" ) ; String taskKey = PATH + taskId + param. getFileName ( ) ; result. setTaskId ( taskId) ; result. setFileName ( param. getFileName ( ) ) ; String ossSlicesId = ossUtils. getUploadId ( taskKey) ; result. setOssSlicesId ( ossSlicesId) ; result. setMinSliceSize ( "100k" ) ; redisService. setCacheObject ( ossSlicesId, result) ; return AjaxResult . success ( result) ; } @PostMapping ( "/uploadShardingFile" ) public AjaxResult testControl ( ShardingInfoDo param, MultipartFile file) throws Exception { ShardingInfoDo redisParam = redisService. getCacheObject ( param. getOssSlicesId ( ) ) ; if ( redisParam != null ) { param. setPartETags ( redisParam. getPartETags ( ) ) ; } param. setSliceNo ( param. getSliceNo ( ) + 1 ) ; int sliceNo = param. getSliceNo ( ) ; int fileSlicesNum = param. getFileSlicesNum ( ) ; String ossSlicesId = param. getOssSlicesId ( ) ; InputStream inputStream = file. getInputStream ( ) ; Map < Integer , PartETag > partETags = param. getPartETags ( ) ; try { PartETag partETag = ossUtils. partUploadFile ( PATH + param. getTaskId ( ) + param. getFileName ( ) , inputStream, ossSlicesId, param. getFileMD5 ( ) , param. getSliceNo ( ) , file. getSize ( ) ) ; partETags. put ( param. getSliceNo ( ) , partETag) ; if ( fileSlicesNum == sliceNo) { String url = ossUtils. completePartUploadFile ( PATH + param. getTaskId ( ) + param. getFileName ( ) , ossSlicesId, new ArrayList < > ( partETags. values ( ) ) ) ; param. setFileUrl ( url) ; redisService. deleteObject ( ossSlicesId) ; return AjaxResult . success ( param) ; } else { redisService. setCacheObject ( param. getOssSlicesId ( ) , param) ; } } catch ( Exception e) { e. printStackTrace ( ) ; throw new Exception ( "上传异常" ) ; } return AjaxResult . success ( ) ; }
工具类
package com. ruoyi. common. utils ; import com. aliyun. oss. * ;
import com. aliyun. oss. model. * ;
import org. slf4j. Logger ;
import org. slf4j. LoggerFactory ;
import org. springframework. beans. factory. annotation. Value ;
import org. springframework. stereotype. Component ;
import javax. annotation. PostConstruct ;
import java. io. InputStream ;
import java. util. List ;
@Component
public class OssUtils { private static Logger logger = LoggerFactory . getLogger ( OssUtils . class ) ; @Value ( "${oss.endpoint}" ) private String endpoint; @Value ( "${oss.accessKeyId}" ) private String accessKeyId; @Value ( "${oss.accessKeySecret}" ) private String accessKeySecret; @Value ( "${oss.bucketName}" ) private String bucketName; private OSS ossClient; @PostConstruct public void init ( ) { ossClient = new OSSClientBuilder ( ) . build ( endpoint, accessKeyId, accessKeySecret) ; } public String completePartUploadFile ( String fileKey, String uploadId, List < PartETag > partETags) { CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest ( bucketName, fileKey, uploadId, partETags) ; CompleteMultipartUploadResult completeMultipartUploadResult = ossClient. completeMultipartUpload ( request) ; String downLoadUrl = getDownloadUrl ( fileKey, bucketName) ; return downLoadUrl; } public PartETag partUploadFile ( String fileKey, InputStream is, String uploadId, String fileMd5, int partNum, long partSize) { UploadPartRequest uploadPartRequest = new UploadPartRequest ( ) ; uploadPartRequest. setBucketName ( bucketName) ; uploadPartRequest. setUploadId ( uploadId) ; uploadPartRequest. setPartNumber ( partNum) ; uploadPartRequest. setPartSize ( partSize) ; uploadPartRequest. setInputStream ( is) ; uploadPartRequest. setKey ( fileKey) ; uploadPartRequest. setMd5Digest ( fileMd5) ; UploadPartResult uploadPartResult = ossClient. uploadPart ( uploadPartRequest) ; return uploadPartResult. getPartETag ( ) ; } public String getUploadId ( String fileKey) { InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest ( bucketName, fileKey) ; InitiateMultipartUploadResult unrest = ossClient. initiateMultipartUpload ( request) ; String uploadId = unrest. getUploadId ( ) ; return uploadId; } public String getDownloadUrl ( String pathFile, String bucketName) { StringBuffer url = new StringBuffer ( ) ; url. append ( endpoint) . append ( "/" ) ; if ( pathFile != null && ! "" . equals ( pathFile) ) { url. append ( pathFile) ; } return url. toString ( ) . replace ( "https://" , "https://" + bucketName + "." ) ; }
}