public void MultipartUploadAbortInMiddleTest() { var sourceFile = Config.MultiUploadSampleFile; //get target object name var targetObjectKey = OssTestUtils.GetObjectKey(_className); var initRequest = new InitiateMultipartUploadRequest(_bucketName, targetObjectKey); var initResult = _ossClient.InitiateMultipartUpload(initRequest); // 设置每块为 1M const int partSize = 1024 * 1024 * 1; var partFile = new FileInfo(sourceFile); // 计算分块数目 var partCount = OssTestUtils.CalculatePartCount(partFile.Length, partSize); Assert.IsTrue(partCount > 1, "Source file is too small to perform multipart upload"); LogUtility.LogMessage("File {0} is splitted to {1} parts for multipart upload", sourceFile, partCount); // 新建一个List保存每个分块上传后的ETag和PartNumber var partETags = new List<PartETag>(); //upload the file using (var fs = new FileStream(partFile.FullName, FileMode.Open)) { //use partCount - 1, so that the last part is left for (var i = 0; i < partCount - 1; i++) { // 跳到每个分块的开头 long skipBytes = partSize * i; fs.Position = skipBytes; // 计算每个分块的大小 var size = partSize < partFile.Length - skipBytes ? partSize : partFile.Length - skipBytes; // 创建UploadPartRequest,上传分块 var uploadPartRequest = new UploadPartRequest(_bucketName, targetObjectKey, initResult.UploadId); uploadPartRequest.InputStream = fs; uploadPartRequest.PartSize = size; uploadPartRequest.PartNumber = (i + 1); var uploadPartResult = _ossClient.UploadPart(uploadPartRequest); // 将返回的PartETag保存到List中。 partETags.Add(uploadPartResult.PartETag); //list parts which are uploaded var listPartsRequest = new ListPartsRequest(_bucketName, targetObjectKey, initResult.UploadId); var listPartsResult = _ossClient.ListParts(listPartsRequest); //there should be only 1 part was not uploaded Assert.AreEqual(i + 1, listPartsResult.Parts.Count(), "uploaded parts is not expected"); } } //abort the upload var abortRequest = new AbortMultipartUploadRequest(_bucketName, targetObjectKey, initResult.UploadId); _ossClient.AbortMultipartUpload(abortRequest); }
public static Task ListPartsAsync(this IOss client, ListPartsRequest listPartsRequest) { return(Task.Factory.StartNew(() => client.ListParts(listPartsRequest))); }