我的ASP.NET MVC(C#)应用程序正在使用Uploadify使用SDK for .NET将文件上传到Amazon S3,但它显示错误的上传进度。
当我使用Uploadify将文件直接上传到我们的服务器时,它可以正常工作。但是,当我使用Amazon S3 TransferUtility.Upload方法上传文件时,进度条会快速显示100%完成,但我需要等待很长时间才能获得Uploadify的onComplete
事件。我的代码如下所示。
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;
}
}
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;
}
}
});
});
为什么进度条不像我期望的那样更新?
答案 0 :(得分:2)
基本上有两次上传。一旦从网页到您的服务器,一次从您的服务器到云端。
您看到的是从网页到上传处理程序的上传进度。浏览器只知道从客户端发送到服务器的数据,而不是从服务器发送到S3的数据。
如果不做一些非常复杂的服务器工作,就无法获得准确的上传进度值。我建议启动后台线程来处理上传到S3或将进度设置为小于100%,直到完成回调为止。
答案 1 :(得分:0)
TransferUtility如何从服务器端回复到swf客户端?我假设从客户端到服务器的上传将反映在进度条中。接下来,服务器转移到S3将(比写入本地文件慢得多),这将不会报告给客户端(swf)。这将导致上传达到100%之间的延迟,然后必须等待页面响应。
答案 2 :(得分:0)
通常,有一个配置部分,您可以在其中设置更新状态提供程序中的进度状态的时间。在你的情况下,我认为必须有这样的东西。
在neatUpload中,此配置由stateMergeIntervalSeconds
设置。我希望这有帮助。