c# jquery asp.net-mvc amazon-s3 uploadify

c# - Se muestra un progreso de carga incorrecto al cargar el archivo a Amazon S3 utilizando SDK y Uploadify



jquery asp.net-mvc (3)

Mi aplicación ASP.NET MVC (C #) está usando Uploadify para cargar archivos en Amazon S3 usando el SDK para .NET, pero muestra un progreso de carga incorrecto.

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, la barra de progreso muestra el 100% de finalización rápidamente, pero debo esperar mucho tiempo para lograr el evento onComplete de onComplete . Mi código se muestra a continuación.

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

Código de 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 como lo espero?


¿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.


Básicamente, hay dos cargas sucediendo. 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.


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 está establecida por stateMergeIntervalSeconds . Espero esta ayuda.