2012-05-18 8 views
10

Meine ASP.NET MVC-Anwendung (C#) verwendet Uploadify, um Dateien mit SDK für .NET auf Amazon S3 hochzuladen, aber es zeigt einen fehlerhaften Upload-Fortschritt an.Falscher Upload-Fortschritt beim Hochladen von Datei auf Amazon S3 mit SDK und Uploadify

Wenn ich eine Datei mit Uploadify direkt auf unseren Server hochlade, funktioniert es einwandfrei. Wenn ich jedoch eine Datei mit der Methode "TransferUtility.Upload" von Amazon S3 hochlade, wird die Fortschrittsanzeige schnell zu 100% fertig, aber ich muss lange warten, um das onComplete-Ereignis von Uploadify zu erreichen. Mein Code ist unten gezeigt.

C# -Code:

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; 
    } 
} 

JavaScript-Code:

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

Warum ist nicht der Fortschrittsbalken zu aktualisieren, wie ich es erwartet habe?

Antwort

0

Wie würde TransferUtility von der Serverseite zurück zum SWF-Client kommunizieren? Ich würde annehmen, dass der Upload vom Client auf den Server in der Fortschrittsleiste widergespiegelt würde. Als nächstes wäre die Server-Übertragung zu S3 (viel langsamer als das Schreiben in eine lokale Datei), die dem Client nicht gemeldet würde (swf). Dies würde die Verzögerung zwischen dem Hochladen von 100% und dem Warten auf die Antwort der Seite ausmachen.

0

Normalerweise gibt es einen Konfigurationsabschnitt, in dem Sie die Zeit für die Aktualisierung des Status des Statusanbieters festlegen können. In deinem Fall nehme ich an, dass es so etwas geben muss.

In adretUpload wird diese Konfig von stateMergeIntervalSeconds gesetzt. Ich hoffe diese Hilfe.

2

Im Wesentlichen gibt es zwei Uploads. Einmal von der Webseite zu Ihrem Server und einmal von Ihrem Server zur Cloud.

Was Sie sehen, ist der Upload-Fortschritt von der Webseite zu Ihrem Upload-Handler. Der Browser weiß nur über die Daten, die vom Client an Ihren Server gesendet werden, nicht die Daten, die von Ihrem Server an S3 gesendet werden.

Ohne einige ziemlich komplexe Serverarbeit zu erledigen, ist es nicht möglich, den genauen Upload-Fortschrittswert zu erhalten. Ich würde empfehlen, entweder einen Hintergrund-Thread abzufeuern, um den Upload nach S3 zu verarbeiten oder den Fortschritt auf etwas unter 100% zu setzen, bis der komplette Callback ausgelöst wird.

Verwandte Themen