2013-05-10 13 views
6

Ich brauche einen laufenden Download abzubrechen, die mitS3 Multipart Upload: Wie kann ich einen abbrechen?

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

I SO und Dokumentation gesucht initiiert wurde, aber ich kann nicht einen Weg ...

Rationale finden: der Benutzer auswählen kann eine Datei zum Hochladen und möglicherweise eine sehr große Datei, sagen wir 1 GB. Ich muss das abbrechen können.

Im schlimmsten Fall konnte ich einfach versuchen, den Thread vollständig zu beenden, oder den Upload auf unreine Weise herunterfahren, aber wie ???

Danke!

+0

Versuchen Sie dieses answ für Sie Problem? [http://serverfault.com/questions/246419/cannot-upload-files-bigger-than-8gb-to-amazon-s3-by-multi-part-upload-dues-to-bro] serverfault.com/questions/246419/cannot-upload-files-bigger-than-8gb-to-amazon-s3-by-multi-part-upload-due-to-bro) und [https://forums.aws. amazon.com/thread.jspa?threadID=123033](https://forums.aws.amazon.com/thread.jspa?threadID=123033) – Elyor

Antwort

5

ich eine official answer from Amazon auf diese erhalten. Hier ist ihre Antwort:

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

Statt BeginUpload/EndUpload Anrufe verwenden, benötigen Sie einen Upload Anruf in einem Gewinde gewickelt verwenden, und heep der Verweis auf diesen Thread.

Wenn der Benutzer abbrechen muss, rufen Sie Abort() auf dem Thread, der den Upload abbrechen wird. Natürlich müssen Sie teilweise hochgeladene Dateien säubern (sie berechnen für sie!).

Wie ich vermuten: sehr einfach und intuitiv, aber nicht so einfach :)

1

Versuchen Sie so etwas wie:

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

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

+0

Danke, aber das wird den aktuell laufenden Thread nicht stoppen. Darüber hinaus führt die TransferUtility einen mehrteiligen Upload nur durch, wenn sie eine bestimmte Größe überschreitet, ansonsten wird ein Standard-Upload durchgeführt, der von diesem Aufruf nicht betroffen ist. – Palantir

0

Wrapping den Upload in ein Gewinde funktioniert, aber, zumindest für mich zu finden, ist es eine ziemlich lange Zeit in Anspruch nimmt, wenn die Datei ist groß, den Thread abzubrechen. Das sieht auch jemand?

Verwandte Themen