J2SE - Commons-net包Ftp下載的檔案不能開啟

襲冷發表於2018-05-18

一、問題

    部署在 Linux 上的應用服務,需要通過 Ftp 從中轉機上下載 Zip 檔案解壓並處理,而中轉機上的檔案是通過 shell 指令碼定時從三方的 Ftp 上下載的

    有一天發現應用服務從中轉機下載的一個 Zip 檔案無法解壓,而在中轉機上的這個 Zip 檔案是可以解壓的

    對比後發現應用服務下載後的檔案比中轉機上的少了一個位元組,而通過檔案比較工具對比兩個檔案的十六進位制,發現中轉機上的檔案中有一處是 "0D 0A" 即 "\r\n",應用服務下載後的檔案中卻是 "0A" 即 "\n"

    這意味著FtpClient在獲取檔案的傳輸過程中對換行符做了轉換 


二、方案

    緊急處理方案是:對中轉機上的問題檔案先解壓,然後做了 dos2unix 處理,最後再壓縮回去

dos2unix fileName

    優化處理方案是:設定 FtpClient 的檔案傳輸型別,從預設的ASCII改為二進位制

ftpclient.setFileType(FTPClient.BINARY_FILE_TYPE);




相關文章