C# 使用SDK和Uploadify将文件上载到Amazon S3时显示的上载进度不正确

C# 使用SDK和Uploadify将文件上载到Amazon S3时显示的上载进度不正确,c#,jquery,asp.net-mvc,amazon-s3,uploadify,C#,Jquery,Asp.net Mvc,Amazon S3,Uploadify,我的ASP.NET MVC(C#)应用程序正在使用Uploadify使用.NET SDK将文件上载到Amazon S3,但它显示的上载进度不正确 当我使用Uploadify将一个文件直接上传到我们的服务器时,它工作得很好。然而,当我使用Amazon S3 TransferUtility.upload方法上传文件时,进度条显示100%快速完成,但我需要等待很长时间才能实现Uploadify的onComplete事件。我的代码如下所示 C#代码: JavaScript代码: jQuery(docum

我的ASP.NET MVC(C#)应用程序正在使用Uploadify使用.NET SDK将文件上载到Amazon S3,但它显示的上载进度不正确

当我使用Uploadify将一个文件直接上传到我们的服务器时,它工作得很好。然而,当我使用Amazon S3 TransferUtility.upload方法上传文件时,进度条显示100%快速完成,但我需要等待很长时间才能实现Uploadify的
onComplete
事件。我的代码如下所示

C#代码:

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;
            }       
        }
    });
});
jQuery(文档).ready(函数(){
var allowdfileext='*.doc;*.docx;*.pdf;'
var extarray=allowdfileext.split(“;”);
jQuery(“#proposalUploadFile”).uploadify({
“uploader”:“/Content/uploadify/uploadify.swf”,
“脚本”:“/File/Upload”,
'文件夹':'/uploads',
“buttonImg”:“/Content/uploadify/upload file.jpg”,
“cancelImg”:“/Content/uploadify/cancel.png”,
“自动”:正确,
‘高度’:‘25’,
“宽度”:“95”,
'wmode':'transparent',
“sizeLimit”:“20971520”,
“onComplete”:已上载文件,
“多重”:错误,
“脚本数据”:{
“saveToFolder”:“Temp”,
“文件扩展名”:“*.doc;*.docx;*.pdf;”,
'subdomain':'qa','saveInLocal':'True'
},
“fileExt”:“*.doc;*.docx;*.pdf;”,
“fileDesc”:“文件(*.doc;*.docx;*.pdf;)”,
“onAllComplete”:文件上载已完成,
“onError”:函数(事件、ID、fileObj、errorObj){
var r='
错误:'; 开关(错误对象信息){ 案例405: r+='无效的文件类型'; 打破 案例406: r+=“其他一些错误。”; 打破 违约: r+=“其他一些错误。”; 打破 } } }); });

为什么进度条没有像我期望的那样更新?

TransferUtility如何从服务器端通信回swf客户端?我假设从客户端到服务器的上传将反映在进度条中。接下来,服务器向S3的传输(比写入本地文件慢得多),这不会报告给客户端(swf)。这将解释上传达到100%和必须等待页面响应之间的延迟。

通常,有一个配置部分,您可以在状态提供程序中设置更新进度状态的时间。在你的情况下,我想一定有类似的事情


在neatUpload中,此配置由
stateMergeIntervalSeconds
设置。我希望这能有所帮助。

基本上有两次上传。一次从网页到服务器,一次从服务器到云

您看到的是从网页到上载处理程序的上载进度。浏览器只知道从客户端发送到服务器的数据,而不知道从服务器发送到S3的数据

如果不做一些相当复杂的服务器工作,就不可能获得准确的上传进度值。我建议要么关闭后台线程来处理到S3的上传,要么将进度设置为小于100%,直到触发完整回调

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