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