S3分段上传:如何取消?

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

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

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

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

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

谢谢!

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

 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调用,而是需要使用包含在Thread中的Upload调用,并且对此线程进行引用。

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

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

尝试以下方法:

 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

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