Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.29 KB | None | 0 0
  1. private void AsyncUploadParts(String objectName, String fileToUpload,
  2. String uploadId, int partSize)
  3. {
  4. var fi = new FileInfo(fileToUpload);
  5. var fileSize = fi.Length;
  6. var partCount = fileSize / partSize;
  7. if (fileSize % partSize != 0)//count part
  8. {
  9. partCount++;
  10. }
  11.  
  12. var ctx = new UploadPartContext()
  13. {
  14. ObjectName = objectName,
  15. UploadId = uploadId,
  16. TotalParts = partCount,
  17. CompletedParts = 0,
  18. SyncLock = new object(),
  19. PartETags = new List<PartETag>(),
  20. WaitEvent = new ManualResetEvent(false)
  21. };
  22. try
  23. {
  24. for (var i = 0; i < partCount; i++)
  25. {
  26. var fs = new FileStream(fileToUpload, FileMode.Open, FileAccess.Read, FileShare.Read);
  27. var skipBytes = (long)partSize * i;
  28. fs.Seek(skipBytes, 0);
  29. var size = (partSize < fileSize - skipBytes) ? partSize : (fileSize - skipBytes);
  30. var request = new UploadPartRequest(bucketName, objectName, uploadId)
  31. {
  32. InputStream = fs,
  33. PartSize = size,
  34. PartNumber = i + 1
  35. };
  36.  
  37. client.BeginUploadPart(request, UploadPartCallback, new UploadPartContextWrapper(ctx, fs, i + 1));
  38.  
  39. }
  40.  
  41. ctx.WaitEvent.WaitOne();
  42. }
  43. catch (Exception ex)
  44. {
  45. Console.WriteLine(ex.ToString());
  46. }
  47. }
  48.  
  49.  
  50.  
  51. private void UploadPartCallback(IAsyncResult ar)
  52. {
  53. try
  54. {
  55. var result = client.EndUploadPart(ar);
  56. var wrappedContext = (UploadPartContextWrapper)ar.AsyncState;
  57. wrappedContext.PartStream.Close();
  58.  
  59. var ctx = wrappedContext.Context;
  60. lock (ctx.SyncLock)
  61. {
  62. var partETags = ctx.PartETags;
  63. partETags.Add(new PartETag(wrappedContext.PartNumber, result.ETag));
  64. ctx.CompletedParts++;
  65. Console.WriteLine("finish {0}/{1}", ctx.CompletedParts, ctx.TotalParts);
  66.  
  67. if (ctx.CompletedParts == ctx.TotalParts)
  68. {
  69. partETags.Sort((e1, e2) => (e1.PartNumber - e2.PartNumber));
  70. var completeMultipartUploadRequest =
  71. new CompleteMultipartUploadRequest(ctx.BucketName, ctx.ObjectName, ctx.UploadId);
  72. foreach (var partETag in partETags)
  73. {
  74. completeMultipartUploadRequest.PartETags.Add(partETag);
  75. }
  76.  
  77. var completeMultipartUploadResult = client.CompleteMultipartUpload(completeMultipartUploadRequest);
  78. Console.WriteLine(@"Async upload multipart result : " + completeMultipartUploadResult.Location);
  79.  
  80. }//complete
  81. }
  82. }
  83.  
  84. catch (Exception ex)
  85. {
  86.  
  87. Console.WriteLine(ex.ToString());
  88. }
  89. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement