2015-06-05 42 views
4

我們使用plupload爲用戶上傳文件到我們的VPS。爲什麼Request.Files.Count有時使用HTML5上傳器?

這裏是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不同,但在我的本地測試中它們是相同的。這可能是一個問題嗎?

一直困在這個問題上幾天,並沒有任何好的線索。

+0

您是否一致測試相同的文件?如果不同的文件,是否有任何文件類型可能導致錯誤的模式? –

+0

另外,我們可以看到實際的HTML嗎? –

+0

我應該更清楚。這是在生產環境中,用戶正在上傳文件。大多數文件都是.ppt,.pptx或.pdf,但我們接受很多文件類型。我們不知道錯誤的文件類型。 HTML是plupload的標準配置,該插件完成了大部分繁重的工作。 – Khan

回答

4

當用戶中止上傳(通常由「遠程主機關閉連接」異常指示),遇到網絡延遲(可能來自HTTP超時),甚至可能出現Plupload代碼問題時,可能會發生故障。我很抱歉沒有明確原因,但我相信我可以通過提供一個解決方案來彌補這個問題,這個解決方案可以限制用戶在您的網站上遇到的問題。

Plupload包含一個設置,它會在遇到HTTP錯誤響應時重試上載。使用max_retries設置,以便在出現「網絡呃逆」的情況下,嘗試再次嘗試(或少數)重試上傳。當然,您仍然會看到例外情況,但這可能會阻止用戶再次點擊上傳按鈕。然後

您的代碼將變爲:

var uploader = new plupload.Uploader({ 
    browse_button: 'fileSelectorLink', 
    max_retries: 2, 
    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' 
}); 

此外,還可以使用二進制流,而不是多的發佈文件,這可能會緩解與舊版本瀏覽器的問題。您可以使用multipart設置來控制此設置。

相關問題