從 FTP 伺服器下載檔案時損壞

從 FTP 伺服器下載檔案時損壞

我目前在從 FTP 伺服器下載某些檔案時遇到問題:它們已損壞。該問題的介紹可以參見這個問題(當時我認為問題出在我的基於 Qt 的軟體上,而現在我確信問題出在伺服器上)。

情況是這樣的:我想將 8 個檔案複製到 FTP 伺服器,然後使用基於 Qt 的軟體和 QNetworkAccessManager 下載它們。在我嘗試這樣做的過程中,我發現總是8 個檔案中的 3 個以相同的方式(相同的錯誤檔案大小)被損壞(使用雜湊驗證 awa 檔案大小)。問題不在於我的軟體:使用 Mozilla 和 Chrome 下載檔案會導致精確的同樣的錯誤。整個流程如下:

  1. Linux Ubuntu 資料夾中有 8 個檔案。文件大小確定。
  2. 這 8 個檔案被轉移到 Windows 7 資料夾中。
  3. 檔案使用 FileZilla 傳送到 FTP 伺服器。完成後,FileZilla 會告訴正確的8 個檔案中每個檔案的大小。
  4. 檔案可以在 Linux Ubuntu 和 Windows 中使用瀏覽器和帶有 QNetworkAccessManager 的基於 Qt 的應用程式下載。在 Windows 中,檔案也可以使用 FileZilla 下載。
  5. 相同的 3 個檔案被損壞 - 透過不同的大小進行驗證。

在討論了 SO 問題中的問題之後,有人建議問題可能是伺服器端的。我在網路上做了一些研究,發現,。建議是 FileZilla 的不同大小計算(這很困難,因為我大部分時間都使用 Windows 和 Linux 大小計算)和「二進位或 ASCII 傳輸問題」。

關於第二個,我也很難相信這種情況,因為雖然3 個有問題的文件中有2 個是軟體,另一個是二進位文件,但還有第四個文件,它也是二進位文件,並且沒有任何問題。 (其他 3 個文件被壓縮為 .tar.gz,我想它們也是二進位文件,但它們是正確下載的)

但假設情況是這樣:我必須指定兩種下載方法之一。那麼,在透過瀏覽器下載和透過 QNetworkAccessManager 下載時,我該如何做到這一點?

如果情況並非如此怎麼辦:那麼到底發生了什麼事?

答案1

看來我們設法找到了問題 - 畢竟,這是 ASCII 或二進制問題。

當問題第一次出現時,我們透過 FileZilla 將檔案傳送到 FTP 伺服器,傳輸模式為「自動」。使用 FileZilla 下載時,傳輸也設定為“自動”,我們遇到了問題。瀏覽器和 Qt 的 QNetworkAccessManager 使用的傳輸模式未知,且都會回傳有問題。

因此,我的團隊使用二進位檔案測試了 FileZilla 的下載;失敗。然後我們使用 ASCII 下載 - 成功。現在我們刪除了伺服器中的文件,並使用 ASCII 上傳了有問題的文件之一,並使用 FileZilla 和 ASCII 下載了它 - 成功。然後我們使用二進位檔案上傳並使用 FileZilla 使用二進位檔案下載 - 成功。但是當使用我的基於 Qt 的應用程式下載時 - 失敗。所以我們猜 QNetworkAcessManager 使用 ASCII 下載,這意味著我必須將其重新配置為以二進位形式下載,或使用 ASCII 將檔案上傳到 FTP 伺服器。由於後面的選項在計算檔案大小時會給我帶來問題,因此如果可能的話,我們將採用第一個解決方案。 (我們也成功地使用瀏覽器下載了它,這似乎是用二進位完成的)。

就是這樣:看起來 QNetworkAccessManager 使用 ASCII 下載,因此,上傳到 FTP 伺服器的任何檔案都需要以 ASCII 格式完成,如果稍後應該使用 QNetworkAcessManager 下載該檔案。

編輯:我的一個錯誤。 QNetworkAccessManager 實際上使用二進位而不是 ASCII 下載。當然,這導致我不得不重新評估我對如何解決問題的解釋,但很明顯 ASCII 或二進制是所有混亂的原因。

編輯2:問題解決了。本質上,我們要做的就是確保資料以二進位形式上傳到 FTP 伺服器;由於 QNAM 以二進位形式下載,因此資料應該沒問題。有趣的是:這似乎只能在 Linux 下運作。如果我在 Windows 中運行基於 Qt 的下載應用程序,問題仍然存在。

編輯3:Windows 中的問題已解決:這是​​一個設定問題,與此問題無關。

相關內容