我需要取消使用
启动的正在进行的下载fileTransferUtility = new TransferUtility(/*...*/);
var uploadRequest = new TransferUtilityUploadRequest() /* config parameters... */
fileTransferUtility.BeginUpload(uploadRequest, new AsyncCallback(uploadComplete), file);
我搜索了SO和文档,但我找不到方法......
理由:用户可以选择要上传的文件,也可以选择一个非常大的文件,比如1GB。我需要能够取消这个。
在最糟糕的情况下,我可以尝试完全杀死线程,或以不干净的方式关闭上传,但是如何???
谢谢!
答案 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));
}
答案 2 :(得分:0)
将上传包装到一个线程有效,但是,至少对我而言,如果文件中止线程很大,则需要很长时间。有人也看到了吗?