2012-05-18 16 views
10

Mi aplicación ASP.NET MVC (C#) usa Uploadify para cargar archivos en Amazon S3 con el SDK para .NET, pero muestra un progreso de carga incorrecto.Progreso de carga incorrecto al cargar archivos en Amazon S3 con SDK y Uploadify

Cuando cargo un archivo directamente en nuestro servidor usando Uploadify funciona bien. Sin embargo, cuando cargo un archivo con el método AmazonUtility Transfer Transfer.til, la barra de progreso muestra el 100% de finalización rápidamente, pero tengo que esperar durante mucho tiempo para lograr el evento onComplete de Uploadify. Mi código se muestra a continuación.

código 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; 
    } 
} 

código 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; 
      }  
     } 
    }); 
}); 

¿Por qué no se actualiza la barra de progreso que estoy esperando que?

Respuesta

0

¿Cómo se comunicaría TransferUtility desde el servidor al cliente swf? Asumiría que la carga del cliente al servidor se reflejaría en la barra de progreso. A continuación, la transferencia del servidor a S3 sería (mucho más lenta que escribir en un archivo local), que no se informaría al cliente (swf). Eso explicaría el retraso entre la carga que llega al 100% y luego tener que esperar a que la página responda.

0

Por lo general, hay una sección de configuración donde puede establecer el tiempo para actualizar el estado del progreso en el proveedor de estado. En tu caso, supongo que debe haber algo así.

En neatUpload esta configuración se establece en stateMergeIntervalSeconds. Espero esta ayuda.

2

Básicamente, hay dos cargas que suceden. Una vez desde la página web a su servidor y una vez desde su servidor a la nube.

Lo que está viendo es el progreso de carga desde la página web a su controlador de carga. El navegador solo conoce los datos que se envían desde el cliente a su servidor, no los datos que se envían desde su servidor a S3.

Sin hacer un trabajo de servidor bastante complejo, no es posible obtener el valor de progreso de carga exacto. Recomiendo disparar un hilo de fondo para manejar la carga a S3 o establecer el progreso en algo menos del 100% hasta que se active la devolución de llamada completa.

Cuestiones relacionadas