2012-05-18 7 views
10

L'applicazione ASP.NET MVC (C#) utilizza Uploadify per caricare file su Amazon S3 utilizzando SDK per .NET, ma mostra progressi di caricamento non corretti.Avanzamento caricamento errato visualizzato durante il caricamento di file su Amazon S3 tramite SDK e Uploadify

Quando carico un file direttamente sul nostro server utilizzando Uploadify funziona correttamente. Tuttavia, quando carico un file utilizzando il metodo Amazon S3 TransferUtility.Upload, la barra di avanzamento mostra il completamento al 100% rapidamente, ma devo attendere molto tempo per raggiungere l'evento onComplete di Uploadify. Il mio codice è mostrato sotto.

codice C#:

using (transferUtility = new TransferUtility(AWSAccessKey, AWSSecretKey)) 
{ 
    try 
    { 
     TransferUtilityUploadRequest request = new TransferUtilityUploadRequest(); 

     request.WithBucketName(AWSBucket) 
      .WithKey(folderKey) 
      .WithTimeout(5 * 60 * 1000) 
      .WithInputStream(uploadFileStream); 

     request.WithCannedACL(S3CannedACL.PublicRead); 

     transferUtility.Upload(request); 
    }     
    catch (AmazonS3Exception amazonS3Exception) 
    { 
     throw amazonS3Exception; 
    } 
} 

codice JavaScript:

jQuery(document).ready(function() { 
    var allowdfileext='*.doc;*.docx;*.pdf;' 
    var extarray=allowdfileext.split(';'); 

    jQuery('#proposalUploadFile').uploadify({ 
     'uploader': '/Content/uploadify/uploadify.swf', 
     'script': '/File/Upload', 
     'folder': '/uploads', 
     'buttonImg':'/Content/uploadify/upload-file.jpg', 
     'cancelImg': '/Content/uploadify/cancel.png', 
     'auto': true,    
     'height': '25', 
     'width': '95', 
     'wmode':'transparent', 
     'sizeLimit': '20971520', 
     'onComplete': fileUploaded, 
     'multi': false, 
     'scriptData': { 
      'saveToFolder': 'Temp', 
      'fileextension':'*.doc;*.docx;*.pdf;', 
      'subdomain':'qa','saveInLocal':'True' 
     }, 
     'fileExt':'*.doc;*.docx;*.pdf;', 
     'fileDesc':'Files (*.doc;*.docx;*.pdf;)', 
     'onAllComplete': fileUploadCompleted, 
     'onError' : function(event, ID, fileObj, errorObj) { 
      var r = '<br />ERROR: '; 

      switch(errorObj.info) { 
       case 405: 
        r += 'Invalid file type.'; 
        break; 
       case 406: 
        r += 'Some other error.'; 
        break; 
       default: 
        r += 'Some other error.'; 
        break; 
      }  
     } 
    }); 
}); 

Perché non è la barra di avanzamento aggiornando come sto aspettando a?

risposta

0

In che modo TransferUtility comunica dal lato server al client SWF? Suppongo che il caricamento dal client al server si rifletta nella barra di avanzamento. Successivamente, il trasferimento del server su S3 sarebbe (molto più lento rispetto alla scrittura su un file locale), che non verrebbe segnalato al client (swf). Ciò spiegherebbe il ritardo tra il caricamento che raggiunge il 100% e quindi dover attendere che la pagina risponda.

0

Di solito, c'è una sezione di configurazione in cui è possibile impostare il tempo per aggiornare lo stato del progresso nel provider di stato. Nel tuo caso presumo che ci debba essere qualcosa del genere.

In neatUpload questa configurazione è impostata da stateMergeIntervalSeconds. Spero che questo aiuto.

2

In sostanza, si verificano due caricamenti. Una volta dalla pagina web al tuo server e una volta dal tuo server al cloud.

Quello che stai vedendo è il progresso del caricamento dalla pagina web al gestore di upload. Il browser conosce solo i dati inviati dal client al tuo server, non i dati inviati dal tuo server a S3.

Senza fare un lavoro server piuttosto complesso, non è possibile ottenere il valore di avanzamento preciso del caricamento. Raccomanderei di attivare un thread in background per gestire il caricamento su S3 o impostare il progresso su qualcosa di meno del 100% fino a quando non viene attivato il callback completo.