2013-05-10 18 views
6

Ho bisogno di cancellare una scarica in corso che è stato avviato conS3 Multipart Upload: come posso cancellare uno?

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

Ho cercato SO e la documentazione, ma non riesco a trovare un modo ...

Razionale: l'utente può scegliere un file da caricare e può scegliere un file molto grande, ad esempio 1 GB. Devo essere in grado di cancellare questo.

Nel peggiore dei casi, potrei semplicemente provare ad eliminare completamente il thread o chiudere il caricamento in modo non pulito, ma come ???

Grazie!

+0

Prova questo ans-w per il tuo problema? [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) e [https://forums.aws. amazon.com/thread.jspa?threadID=123033](https://forums.aws.amazon.com/thread.jspa?threadID=123033) – Elyor

risposta

5

ho ricevuto un official answer from Amazon su questo. Ecco la loro risposta:

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

Invece di usare BeginUpload/EndUpload chiamate, è necessario utilizzare un Upload chiamata avvolto in un thread, e Heep il riferimento a questo thread.

Se l'utente deve annullare, chiamare Abort() sul thread, che annullerà il caricamento. Certo, è necessario pulire i file parzialmente caricati (che fatturano per loro!).

Come sospettavo: molto semplice ed intuitiva, ma non così facile da trovare :)

1

Prova qualcosa di simile:

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

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

+0

Grazie, ma purtroppo questo non interromperà il thread attualmente in fase di caricamento. Inoltre, TransferUtility eseguirà un caricamento multiparte solo se supera una certa dimensione, altrimenti eseguirà un caricamento standard, che non è influenzato da questa chiamata. – Palantir

0

Avvolgere la Carica in funziona un filo, ma, almeno a me, ci vuole molto tempo, se il file è grande per interrompere la discussione. Qualcuno vede anche questo?

Problemi correlati