java oss 断点上传文件_java实现oss断点续传
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內所有上傳事件
MultipartUploadListing listing = client.listMultipartUploads(lmur);
// 新建一個List保存每個分塊上傳后的ETag和PartNumber
List partETags = new ArrayList();
// 遍歷所有上傳事件 設置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++;
}
}
// 設置每塊為 5M(最小支持5M)
final int partSize = 1024 * 1024 * 5;
// 計算分塊數目
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;
// 創建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());
// 關閉文件
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;
}
總結
以上是生活随笔為你收集整理的java oss 断点上传文件_java实现oss断点续传的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 新疆岩煌集团公司投资中建七局一公司中标5
- 下一篇: Java SE 6.0编程指南_Java
