日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java oss 断点上传文件_java实现oss断点续传

發(fā)布時間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java oss 断点上传文件_java实现oss断点续传 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

bucketName ---oss上bucket的名字

key ---文件所在的文件夾加文件名

例如:我想把ceshi.txt 存放在bucket叫aa的里面叫bb的文件夾下。那么我的bucketName傳的值就是 aa,key值是bb/ceshi.txt

public String multipartUploadObject(String bucketName, String key,File partFile) {

String tag = null;

String uploadid = null;

int j=0;

// 初始化一個OSSClient

OSSClient client = this.createOSSClient();

ListMultipartUploadsRequest lmur = new ListMultipartUploadsRequest(bucketName);

// 獲取Bucket內(nèi)所有上傳事件

MultipartUploadListing listing = client.listMultipartUploads(lmur);

// 新建一個List保存每個分塊上傳后的ETag和PartNumber

List partETags = new ArrayList();

// 遍歷所有上傳事件 設(shè)置UploadId

for (MultipartUpload multipartUpload : listing.getMultipartUploads()) {

if (multipartUpload.getKey().equals(key)) {

uploadid=multipartUpload.getUploadId();

break;

}

}

if(StringUtils.isEmpty(uploadid)){

// 開始Multipart Upload,InitiateMultipartUploadRequest 來指定上傳Object的名字和所屬Bucke

InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(bucketName, key);

InitiateMultipartUploadResult initiateMultipartUploadResult = client.initiateMultipartUpload(initiateMultipartUploadRequest);

uploadid=initiateMultipartUploadResult.getUploadId();

}else{

ListPartsRequest listPartsRequest = new ListPartsRequest(bucketName,key, uploadid);

//listParts 方法獲取某個上傳事件所有已上傳的塊

PartListing partListing = client.listParts(listPartsRequest);

// 遍歷所有Part

for (PartSummary part : partListing.getParts()) {

partETags.add(new PartETag(part.getPartNumber(),part.getETag()));

j++;

}

}

// 設(shè)置每塊為 5M(最小支持5M)

final int partSize = 1024 * 1024 * 5;

// 計算分塊數(shù)目

int partCount = (int) (partFile.length() / partSize);

if (partFile.length() % partSize != 0) {

partCount++;

}

try {

for (int i=j ; i < partCount; i++) {

// 獲取文件流

FileInputStream fis;

fis = new FileInputStream(partFile);

// 跳到每個分塊的開頭

long skipBytes = partSize * i;

fis.skip(skipBytes);

// 計算每個分塊的大小

long size = partSize < partFile.length() - skipBytes ? partSize: partFile.length() - skipBytes;

// 創(chuàng)建UploadPartRequest,上傳分塊

UploadPartRequest uploadPartRequest = new UploadPartRequest();

uploadPartRequest.setBucketName(bucketName);

uploadPartRequest.setKey(key);

uploadPartRequest.setUploadId(uploadid);

uploadPartRequest.setInputStream(fis);

uploadPartRequest.setPartSize(size);

uploadPartRequest.setPartNumber(i + 1);

UploadPartResult uploadPartResult = client.uploadPart(uploadPartRequest);

// 將返回的PartETag保存到List中。

partETags.add(uploadPartResult.getPartETag());

// 關(guān)閉文件

fis.close();

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

CompleteMultipartUploadRequest completeMultipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, key, uploadid, partETags);

// 完成分塊上傳

CompleteMultipartUploadResult completeMultipartUploadResult = client.completeMultipartUpload(completeMultipartUploadRequest);

// 打印Object的ETag(返回的ETag不是md5.具體是什么不詳)

tag = completeMultipartUploadResult.getETag();

return tag;

}

總結(jié)

以上是生活随笔為你收集整理的java oss 断点上传文件_java实现oss断点续传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。