【发布时间】:2015-08-20 17:50:05
【问题描述】:
我们正在使用 plupload 让用户将文件上传到我们的 VPS。
这里是plupload代码:
var uploader = new plupload.Uploader({
browse_button: 'fileSelectorLink',
container: 'uploadContainer',
drop_element: 'uploadbox',
url: '/UploadHandler.ashx',
unique_names: true,
multi_selection: false,
flash_swf_url: '/scripts/plupload/js/Moxie.swf',
silverlight_xap_url: '/scripts/plupload/js/Moxie.xap'
});
他是处理请求的代码:
Public Sub ProcessRequest(context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim runtime As String = If(context.Request("runtime") IsNot Nothing, context.Request("runtime"), "Unknown")
If context.Request IsNot Nothing Then
If context.Request.Files.Count > 0 Then
Dim fileUpload As HttpPostedFile = context.Request.Files(0)
...
Else
' Throw an exception
End If
End Sub
偶尔(大约 2% 的时间)会抛出异常。以下是引发错误的请求示例:
Runtime: html5
Request.ContentType: multipart/form-data; boundary=----WebKitFormBoundaryo7JAtlhKsg8xDcQT
Request.ContentLength: 3758089
Request.ContentEncoding: System.Text.SBCSCodePageEncoding
Request.TotalBytes: 3179067
这些错误似乎发生在不同的浏览器和操作系统(甚至是现代浏览器)上,所以这似乎不是问题。如果浏览器不处理异步文件上传,Plupload 应该回退到其他版本。我认为 ContentEncoding 看起来很奇怪,但它似乎总是这么说(也许 plupload 像那样工作?)。唯一让我震惊的是 ContentLength 和 TotalBytes 不同,但在我的本地测试中它们是相同的。会不会有问题?
在这个问题上卡了几天,没有任何好的线索。
【问题讨论】:
-
您是否始终使用同一个文件进行测试?如果不同的文件,是否有任何文件类型可能导致错误的模式?
-
另外,我们能看到实际的 HTML 吗?
-
我应该更清楚。这是在生产环境中,用户正在上传文件。大多数文件是 .ppt、.pptx 或 .pdf,但我们接受很多文件类型。我们不知道错误的文件类型。 HTML 是 plupload 的标准,插件完成了大部分繁重的工作。
-
如果您的 TotalBytes (收到的实际字节数)小于您的 ContentLength (将整个文件发送到服务器所需的总字节数),情况似乎是这样,在服务器接收到整个文件之前,您要么在用户端或网络某处超时,要么上传插件中的问题导致上传在某些情况下过早终止。
标签: asp.net vb.net html plupload