C# S3多部分上传:如何取消一个?
我需要取消使用启动的正在进行的下载C# S3多部分上传:如何取消一个?,c#,.net,amazon-web-services,amazon-s3,C#,.net,Amazon Web Services,Amazon S3,我需要取消使用启动的正在进行的下载 fileTransferUtility = new TransferUtility(/*...*/); var uploadRequest = new TransferUtilityUploadRequest() /* config parameters... */ fileTransferUtility.BeginUpload(uploadRequest, new AsyncCallback(uploadComplete), file); 我已经搜索了SO
fileTransferUtility = new TransferUtility(/*...*/);
var uploadRequest = new TransferUtilityUploadRequest() /* config parameters... */
fileTransferUtility.BeginUpload(uploadRequest, new AsyncCallback(uploadComplete), file);
我已经搜索了SO和文档,但我找不到方法
理由:用户可以选择要上传的文件,也可以选择非常大的文件,比如1GB。我需要能够取消这个
在最坏的情况下,我可以尝试完全杀死线程,或者以一种不干净的方式关闭上传,但是怎么办
谢谢 试试以下方法:
s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest()
.WithBucketName(bucketName)
.WithKey(key)
.WithUploadId(Response.UploadId));
}
请参见我收到了一封关于此的邮件。答复如下:
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()
,这将取消上载。当然,你需要清理部分上传的文件(他们会为此付费!)
正如我所怀疑的:非常简单和直观,但不容易找到:)将上传包装到线程中是可行的,但是,至少对我来说,如果文件太大,中止线程需要相当长的时间。有人也看到了吗?试试这个ans-w解决你的问题吗?谢谢,但不幸的是,这不会停止当前的上传线程。此外,TransferUtility仅在其超过一定大小时才会执行多部分上载,否则将执行标准上载,这不受此调用的影响。我需要添加对
thread.Start()
的调用,然后才能执行此操作。