public void MultipartUploadAbortInMiddleTest() { var sourceFile = Config.MultiUploadTestFile; //get target object name var targetObjectKey = OssTestUtils.GetObjectKey(_className); var initRequest = new InitiateMultipartUploadRequest(_bucketName, targetObjectKey); var initResult = _ossClient.InitiateMultipartUpload(initRequest); // Set the part size const int partSize = 1024 * 1024 * 1; var partFile = new FileInfo(sourceFile); // Calculate the part count 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); // Create a list to save result 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++) { // Skip to the start position long skipBytes = partSize * i; fs.Position = skipBytes; // calculate the part size var size = partSize < partFile.Length - skipBytes ? partSize : partFile.Length - skipBytes; // Create a UploadPartRequest, uploading parts var uploadPartRequest = new UploadPartRequest(_bucketName, targetObjectKey, initResult.UploadId); uploadPartRequest.InputStream = fs; uploadPartRequest.PartSize = size; uploadPartRequest.PartNumber = (i + 1); var uploadPartResult = _ossClient.UploadPart(uploadPartRequest); // Save the result 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, OssTestUtils.ToArray <Part>(listPartsResult.Parts).Count, "uploaded parts is not expected"); } } //abort the upload var abortRequest = new AbortMultipartUploadRequest(_bucketName, targetObjectKey, initResult.UploadId); _ossClient.AbortMultipartUpload(abortRequest); }
public static void CleanBucket(IOss oss, string bucketName) { if (!BucketExists(oss, bucketName)) { return; } //abort in progress multipart uploading var multipartListing = oss.ListMultipartUploads(new ListMultipartUploadsRequest(bucketName)); foreach (var upload in multipartListing.MultipartUploads) { var abortRequest = new AbortMultipartUploadRequest(bucketName, upload.Key, upload.UploadId); oss.AbortMultipartUpload(abortRequest); } // Clean up objects var objects = oss.ListObjects(bucketName); foreach (var obj in objects.ObjectSummaries) { oss.DeleteObject(bucketName, obj.Key); } // Delete the bucket. oss.DeleteBucket(bucketName); }
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 void CleanBucket(IOss oss, string bucketName) { if (!BucketExists(oss, bucketName)) return; //abort in progress multipart uploading var multipartListing = oss.ListMultipartUploads(new ListMultipartUploadsRequest(bucketName)); foreach (var upload in multipartListing.MultipartUploads) { var abortRequest = new AbortMultipartUploadRequest(bucketName, upload.Key, upload.UploadId); oss.AbortMultipartUpload(abortRequest); } // Clean up objects var objects = oss.ListObjects(bucketName); foreach(var obj in objects.ObjectSummaries) { oss.DeleteObject(bucketName, obj.Key); } // Delete the bucket. oss.DeleteBucket(bucketName); }
//[Test] public void ListMultipartUploadsWithHiddenCharacters() { char[] buffer = new char[2]; buffer[0] = Convert.ToChar(0x1c); buffer[1] = Convert.ToChar(0x1a); var newKey = _keyName + (new string(buffer)) + ".1.cd"; try { var initRequest = new InitiateMultipartUploadRequest(_bucketName, newKey); var initResult = _ossClient.InitiateMultipartUpload(initRequest); Assert.AreEqual(newKey, initRequest.Key); // 设置每块为 5M const int partSize = 5 * 1024 * 1024; var fileInfo = new FileInfo(Config.MultiUploadTestFile); // 计算分块数目 var partCount = OssTestUtils.CalculatePartCount(fileInfo.Length, partSize); // 新建一个List保存每个分块上传后的ETag和PartNumber var partETags = new List <PartETag>(); //upload the file using (var fs = new FileStream(fileInfo.FullName, FileMode.Open)) { for (var i = 0; i < partCount; i++) { // 跳到每个分块的开头 long skipBytes = partSize * i; fs.Position = skipBytes; // 计算每个分块的大小 long size = partSize < fileInfo.Length - skipBytes ? partSize : fileInfo.Length - skipBytes; // 创建UploadPartRequest,上传分块 var uploadPartRequest = new UploadPartRequest(_bucketName, newKey, initResult.UploadId); uploadPartRequest.InputStream = fs; uploadPartRequest.PartSize = size; uploadPartRequest.PartNumber = (i + 1); var uploadPartResult = _ossClient.UploadPart(uploadPartRequest); // 将返回的PartETag保存到List中。 partETags.Add(uploadPartResult.PartETag); var multipartListing = _ossClient.ListMultipartUploads(new ListMultipartUploadsRequest(_bucketName)); foreach (var upload in multipartListing.MultipartUploads) { Assert.AreEqual(newKey, upload.Key); } } } var completeRequest = new CompleteMultipartUploadRequest(_bucketName, newKey, initResult.UploadId); foreach (var partETag in partETags) { completeRequest.PartETags.Add(partETag); } _ossClient.CompleteMultipartUpload(completeRequest); } finally { var multipartListing = _ossClient.ListMultipartUploads(new ListMultipartUploadsRequest(_bucketName)); foreach (var upload in multipartListing.MultipartUploads) { var abortRequest = new AbortMultipartUploadRequest(_bucketName, newKey, upload.UploadId); _ossClient.AbortMultipartUpload(abortRequest); } _ossClient.DeleteObject(_bucketName, newKey); } }
public void MultipartUploadNegativeTest() { var key = OssTestUtils.GetObjectKey(_className); // Initiate a multipart upload var initRequest = new InitiateMultipartUploadRequest(_bucketName, key); Assert.AreEqual(initRequest.RequestPayer, RequestPayer.BucketOwner); try { var initResult = _ossPayerClient.InitiateMultipartUpload(initRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } // uploads the part var uploadPartRequest = new UploadPartRequest(_bucketName, key, "initId") { InputStream = new MemoryStream(Encoding.ASCII.GetBytes("hello world")), PartSize = 11, PartNumber = 1 }; Assert.AreEqual(uploadPartRequest.RequestPayer, RequestPayer.BucketOwner); try { var uploadPartResult = _ossPayerClient.UploadPart(uploadPartRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } //list part var listpartRequest = new ListPartsRequest(_bucketName, key, "initId"); Assert.AreEqual(listpartRequest.RequestPayer, RequestPayer.BucketOwner); try { var listPartResult = _ossPayerClient.ListParts(listpartRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } //abort var abortRequest = new AbortMultipartUploadRequest(_bucketName, key, "initId"); Assert.AreEqual(abortRequest.RequestPayer, RequestPayer.BucketOwner); try { _ossPayerClient.AbortMultipartUpload(abortRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } //complete var completeRequest = new CompleteMultipartUploadRequest(_bucketName, key, "initId"); Assert.AreEqual(completeRequest.RequestPayer, RequestPayer.BucketOwner); try { var listPartResult = _ossPayerClient.CompleteMultipartUpload(completeRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } //list upload var listUploadsRequest = new ListMultipartUploadsRequest(_bucketName); Assert.AreEqual(listUploadsRequest.RequestPayer, RequestPayer.BucketOwner); try { var listUploadsResult = _ossPayerClient.ListMultipartUploads(listUploadsRequest); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } //uploadpart copy var uploadpartcopyRequet = new UploadPartCopyRequest(_bucketName, key, _bucketName, key, "uploadId") { BeginIndex = 0, PartNumber = 1, PartSize = 100 * 1024 }; Assert.AreEqual(uploadpartcopyRequet.RequestPayer, RequestPayer.BucketOwner); try { var uploadpartcopyResult = _ossPayerClient.UploadPartCopy(uploadpartcopyRequet); Assert.Fail("should not here."); } catch (OssException e) { Assert.AreEqual(e.ErrorCode, "AccessDenied"); } }
public static Task AbortMultipartUploadAsync(this IOss client, AbortMultipartUploadRequest abortMultipartUploadRequest) { return(Task.Factory.StartNew(() => client.AbortMultipartUpload(abortMultipartUploadRequest))); }