S3分段上传:如何取消?

时间:2013-05-10 15:24:17

标签: c# .net amazon-web-services amazon-s3

我需要取消使用

启动的正在进行的下载
fileTransferUtility = new TransferUtility(/*...*/);
var uploadRequest = new TransferUtilityUploadRequest() /* config parameters... */
fileTransferUtility.BeginUpload(uploadRequest, new AsyncCallback(uploadComplete), file);

我搜索了SO和文档,但我找不到方法......

理由:用户可以选择要上传的文件,也可以选择一个非常大的文件,比如1GB。我需要能够取消这个。

在最糟糕的情况下,我可以尝试完全杀死线程,或以不干净的方式关闭上传,但是如何???

谢谢!

3 个答案:

答案 0 :(得分:6)

我收到了official answer from Amazon。以下是他们的回复:

var fileTransferUtility = new TransferUtility(/* */);
var uploadRequest = new TransferUtilityUploadRequest();

Thread thread = new Thread(() => fileTransferUtility.Upload(uploadRequest));
Thread.Sleep(5000); // If not done in 5 seconds abort
if(thread.IsAlive)
    thread.Abort();

您需要使用包含在线程中的BeginUpload调用,而不是使用EndUpload / Upload调用,并且会对此线程进行引用。

如果用户需要取消,请在线程上调用Abort(),这将取消上传。当然,您需要清理部分上传的文件(他们为他们收费!)。

我怀疑:非常简单直观,但不容易找到:)

答案 1 :(得分:1)

尝试类似:

s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest()
  .WithBucketName(bucketName)
  .WithKey(key)
  .WithUploadId(Response.UploadId));
}

请参阅http://docs.aws.amazon.com/sdkfornet/latest/apidocs/html/M_Amazon_S3_AmazonS3_AbortMultipartUpload.htm

答案 2 :(得分:0)

将上传包装到一个线程有效,但是,至少对我而言,如果文件中止线程很大,则需要很长时间。有人也看到了吗?