2013-05-10 64 views
6

我需要取消與S3分段上傳:我怎樣才能取消一個?

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

我已搜查SO和文檔發起正在進行的下載,但我不能找到一種方法...

理由:用戶可以選擇要上傳的文件,並可以選擇一個非常大的文件,比如1GB。我需要能夠取消這個。

在最糟糕的情況下,我可能會試圖完全殺死線程,或以不潔的方式關閉上載,但是如何?

謝謝!

+0

試試這個答案爲你問題? [http://serverfault.com/questions/246419/cannot-upload-files-bigger-than-8gb-to-amazon-s3-by-multi-part-upload-due-to-bro](http:// serverfault.com/questions/246419/cannot-upload-files-bigger-than-8gb-to-amazon-s3-by-multi-part-upload-due-to-bro)和[https://forums.aws。 amazon.com/thread.jspa?threadID=123033](https://forums.aws.amazon.com/thread.jspa?threadID=123033) – Elyor 2013-05-13 06:45:35

回答

5

我收到了這樣的一個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

試着這麼做:

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

+0

謝謝,但不幸的是,這不會阻止當前上傳的線程。此外,TransferUtility只會在超過一定大小的情況下才會進行分段上傳,否則會執行標準上傳,而不受此次調用的影響。 – Palantir 2013-05-15 08:19:26

0

結束語上傳到一個線程的作品,但是,至少對我來說,它需要相當長的時間,如果該文件放棄線程很大。任何人都看到這個?