2010-03-19 44 views
1

我們有客戶試圖通過移動連接下載setup.exe文件,該文件看起來很慢。Setup.exe文件在沒有cab文件的情況下通過不良連接下載

他們報告說,當他們點擊下載的setup.exe時,安裝嚮導啓動,但通過嚮導的一部分,他們收到一條錯誤消息,指出cab文件已損壞或丟失。

他們寄給我們一個問題的平板電腦,我們沒有問題下載文件,但 我可以通過使用https下載文件複製問題(https通常用於訪問網站的其餘部分,儘管它是不需要下載)。當我這樣做時,下載的文件是2.8MB。它應該是8MB。

我不認爲https是問題的根本原因,因爲我可以在瀏覽器歷史記錄中使用http查看下載鏈接,所以我知道客戶試圖使用http下載。我認爲問題在於,糟糕的連接阻止了完整的下載,但瀏覽器就像完成了一樣。

有沒有辦法確保文件完全下載,或根本沒有下載?爲什麼瀏覽器沒有指出下載不完整?

回答

2

很可能,EXE文件駐留的Web服務器不會發送Content-Length header。如果這個標頭不存在,瀏覽器可以確定下載是否完成的唯一方法是「當字節停止時」,即TCP/IP連接關閉或超時。如果連接質量低,這可能會過早地發生。

另一種選擇是發送標題,但瀏覽器忽略它。儘管如此,這樣的腦損傷水平非常罕見,但如果您的瀏覽器是非標準/嵌入/古代的東西,則可能會出現這種情況。

因此,解決此問題的方法可能是修復HTTP服務器。並查看用於構建安裝程序包的軟件選項:可能存在一個設置,用於創建最終EXE的散列(或至少記住所需的長度),並抱怨出現更明智的錯誤消息是否存檔已損壞。

+0

對於沒有Content_Length標頭,您是絕對正確的。我實際上有代碼(C#)來打開FileStream並將其發送到Response。我現在已經將Content-Length添加到Response頭部,現在我可以通過文件大小和進度條獲得一個很好的對話框。我試圖通過在調試器中設置斷點來模擬不完整的下載,並提前退出。但是,瀏覽器(IE7)仍然報告下載已完成 - 儘管只有17kb而不是8MB。我想也許我的測試是不正確的,因爲我可能仍然在發送Response.End ....... – Colin 2010-03-19 14:20:51

相關問題