我在 Apache HTTP 伺服器上有一個約 250Mb 的 zip 檔案。一些用戶抱怨直接從網站下載檔案後出現「損壞的 zip 資料夾」(儘管該網站是基於 Drupal 構建的,但它使用公共下載方法,因此應該是直接下載)
當他們嘗試在 Windows 中開啟它時,錯誤訊息是:
壓縮 (zip) 資料夾無效或已損壞
我自己在 Windows XP 上嘗試過,並使用 Firefox 14 和 IE8。有時它可以正確下載並打開,有時我會收到錯誤訊息。
另一位使用者使用 Windows 7 並使用 Internet Explorer,並在多次下載嘗試後收到此訊息。
當我使用 Filezilla 透過 FTP 下載時,我可以毫無錯誤地開啟 zip 檔案。
由於 FTP 和 HTTP 下載有時有效,那麼我假設伺服器上的檔案沒有損壞,但在下載過程中發生了一些情況,重新上傳檔案不會修復任何問題(我已經嘗試過這一點)。
我使用 IZArc 創建了 zip 文件,但我不太確定創建方法在這種情況下是否相關,因為它有時有效。
- 出現上述錯誤訊息的原因是什麼?
- 為什麼有時會出現這種情況,而不是總是出現這種情況?
- 我該怎麼做才能確保將來打開 zip 檔案時不會出現任何錯誤?
答案1
出現上述錯誤訊息的原因是什麼?
下載的內容可能已損壞或被截斷(不完整)。檢查下載的檔案大小是否與伺服器上的大小相同。
為什麼有時會出現這種情況,而不是總是出現這種情況?
下載可能會因為連接斷開而被截斷,這是隨機的 - 它可能會發生,也可能不會發生。如果您的連接品質更好,則發生這種情況的可能性可能會較小。
我該怎麼做才能確保將來打開 zip 檔案時不會出現任何錯誤?
為所有下載提供校驗和,並讓使用者驗證它們。但是,您無法真正避免網路問題。您可能希望與您的主人交談。
答案2
要解決問題,您可以採取的一件事是使用該 zip 檔案的 MD5 或 SHA-1 雜湊值。我假設您有離線可用的原始 zip 檔案。
使用西格文,您可以計算 zip 檔案的 SHA-1 或 MD5 雜湊值,然後發布結果。哈希確實很酷,因為它們可以用於在位元層級驗證一個檔案與另一個檔案完全相同。例如:包含「0123456789」的檔案的雜湊值為 3749f52bb326ae96782b42dc0a97b4c1。包含「1123456789」的檔案的雜湊值是 b0b7fa225796be83e7fea1345c13d3dd。
如果我沒記錯的話,兩個字串之間只有一點點差異,但正如你所看到的,結果哈希值有很大差異。發布 MD5 或 SHA-1 雜湊值在軟體開發領域是很常見的事情,因為這是確保檔案不會損壞的好方法。發布 MD5/SHA-1 雜湊值後,您可以讓客戶取得 zip 的雜湊值來查看它是否確實已損壞。
有許多適用於 Windows、Linux 和 Mac 的實用程式可以產生 MD5 和 SHA-1 雜湊值。我使用 Cygwin 因為它是免費的。
答案3
當資料夾中的檔案名稱之一包含特殊字元(例如引號)時,通常會發生這種情況"
。您必須忽略這些文件。
但是當你有幾千個文件時就很難了,也許你可以嘗試一下7-拉鍊。
答案4
如果用戶端的檔案大小正確,則這種情況可能是由於用戶端 PC 的記憶體故障或中間的網路裝置故障造成的。通常,隨機位元切換在許多應用程式中並不特別明顯,但當涉及到用於檢查存檔完整性的校驗和時,每一位都很重要,這些錯誤就變得顯而易見。