我有一个ASP.NET Web应用程序(使用WebForms)并使用Uploadify来处理上传大文件。这是通过将文件发布到HttpHandler来完成的。
代码示例(为演示目的而简化):
$(".uploadify").uploadify({
'uploader': '/uploadify/uploadify.swf',
'script': 'SaveUploadedFile.ashx',
'cancelImg': '/uploadify/cancel.png',
'queueID': 'fileQueue',
'auto': true,
'multi': false,
'method': 'post',
onSelect: function(e, queueId, file) {
alert(file.name + " selected");
},
onComplete: function(e, queueId, file, response, data) {
alert("complete: " + response);
},
onCancel: function(e, queueId, file, data) {
alert("cancel");
}
});
接收文件的HttpHandler非常简单:
public void ProcessRequest(HttpContext context)
{
Debug.WriteLine("Save file");
if (context.Request.Files.Count == 0)
throw new SystemException("No files uploaded");
// Get the file
HttpPostedFile file = context.Request.Files.Get(0);
Debug.WriteLine("Got file: " + file.FileName + ", Length: " + file.ContentLength);
// Save it
string guid = Guid.NewGuid().ToString();
string path = Path.Combine(Path.GetTempPath(), guid + ".tmp");
file.SaveAs(path);
Debug.WriteLine("Saved to path: " + path);
// Update response and return guid
context.Response.StatusCode = 200;
context.Response.Write(guid);
Debug.WriteLine("All Done");
}
问题是显示的进度条实际上并不反映上传的进度,并且在文件实际上传之前很久就显示上传已完成。因此,当进度条保持在100%时,用户界面会有效地显示为无效,直到文件完成。
在某些情况下,上传只是在达到100%后失败,OnComplete事件永远不会被触发,几乎就像HttpHandler的响应在传输中丢失一样,即使文件已保存。
我已经尝试了Flajaxian和SWFUpload,并且遇到了类似的问题,即进度条与实际上传进度完全不同步,表明在上传实际完成之前就完成了。
在本地测试或使用小文件(通常在几兆字节以下)时,这个问题并不明显,因为这些文件往往上传速度相当快,而且上传的文件和进度条完成之间几乎没有延迟。
有没有办法在ASP.NET网络应用程序中使用Flash上传解决方案(例如Uploadify)并让进度条更好地代表上传的实际进度?
更新最终,我放弃了尝试使用基于Flash的上传器,因为它们看起来有点过于尴尬,尤其是进度条,它根本不代表上传的实际进度。将其替换为Brettle NeatUpload,而不是更好。
答案 0 :(得分:2)
这可能是您的防病毒软件(特别是AVG)及其上传代理或防火墙的问题。这是一个相关的问题:
答案 1 :(得分:0)
您的问题似乎很常见。我会试试http://www.swfupload.org/。