2013-05-10 10 views
6

muszę anulować pobieranie w toku, który został zainicjowany zS3 Multipart Upload: jak mogę anulować jeden?

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

Przeszukałem SO i dokumentacji, ale nie mogę znaleźć sposób ...

Uzasadnienie: użytkownik może wybrać plik do przesłania i może wybrać bardzo duży plik, powiedzmy 1 GB. Muszę móc to anulować.

W najgorszym przypadku mógłbym po prostu spróbować całkowicie zabić wątek lub wyłączyć przesyłanie w nieczysty sposób, ale jak?

Dzięki!

+0

Spróbuj rozwiązać ten problem z ans-w? [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) i [https://forums.aws. amazon.com/thread.jspa?threadID=123033](https://forums.aws.amazon.com/thread.jspa?threadID=123033) – Elyor

Odpowiedz

5

Otrzymałem official answer from Amazon na ten temat. Oto ich odpowiedź:

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(); 

Zamiast BeginUpload/EndUpload połączeń, trzeba użyć Upload połączenia zawinięte w wątku i Heep odniesienie do tego wątku.

Jeśli użytkownik musi anulować, zadzwoń pod numer Abort(), co spowoduje anulowanie przesyłania. Oczywiście musisz wyczyścić częściowo przesłane pliki (naliczane za nie!).

Jak podejrzewałem: bardzo prosty i intuicyjny, ale nie tak łatwo znaleźć :)

1

Spróbuj czegoś takiego:

s3Client.AbortMultipartUpload(new AbortMultipartUploadRequest() 
    .WithBucketName(bucketName) 
    .WithKey(key) 
    .WithUploadId(Response.UploadId)); 
} 

zobaczyć http://docs.aws.amazon.com/sdkfornet/latest/apidocs/html/M_Amazon_S3_AmazonS3_AbortMultipartUpload.htm

+0

Dzięki, ale niestety to nie powstrzyma aktualnie przesyłanego wątku. Co więcej, TransferUtility będzie przesyłać wieloczęściowo tylko wtedy, gdy przekroczy określony rozmiar, w przeciwnym razie zrobi standardowy upload, na który nie ma wpływu to połączenie. – Palantir

0

Owijanie Prześlij do prac wątku, ale, przynajmniej dla mnie, to zajmuje sporo czasu, jeśli plik jest duży, aby przerwać wątek. Ktoś to widzi?