6

我需要取消正在启动的下载

fileTransferUtility = new TransferUtility(/*...*/);
var uploadRequest = new TransferUtilityUploadRequest() /* config parameters... */
fileTransferUtility.BeginUpload(uploadRequest, new AsyncCallback(uploadComplete), file);

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

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

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

谢谢!

4

3 回答 3

6

我收到了来自亚马逊的官方答复。这是他们的回复:

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/调用,并保留对该线程的引用。EndUploadUpload

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

正如我所怀疑的那样:非常简单直观,但并不容易找到:)

于 2013-05-15T08:23:45.317 回答
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

于 2013-05-15T08:15:52.417 回答
0

将 Upload 包装到一个线程中是可行的,但是,至少对我而言,如果文件很大以中止线程,则需要相当长的时间。有人也看到这个吗?

于 2015-01-22T15:16:49.383 回答