問題表現:本地zip包上傳到FTP後壓縮包中只有一個0KB的文件,整個ZIP包只占10B好像(大小記不清了,反正只有一個文件名,裡面內容是空的,以記事本打開的話能看到一個問號)
問題詳情:
項目中是有一個單獨的FTP上傳類的,上傳的方法是這樣的:
public >
...
public boolean upload(String ftppath,String localfilepath){
...
//前面的代碼已經將工作目錄設置好了
FileInputStream inputStream=new FileInputStream(localfilepath);
ftpClient.storeFile(filenam,localfilepath);
...
}
...
}
public static void main(String[]args){
myftpclient client=new myftpclient();
...//設置連接參數
client.upload("/export/abcd.csv.zip","D:/localtmp/export/abcd.csv.zip");
...
}
大體上的代碼就是這樣.
執行main函數時,文件是能完整的上傳到ftp的.
在另一個類(跨包)中通過spring AutoWire(連接參數已在context中配置)注入之後,調用upload方法就會只上傳一個10B大小的包含一個空文件的ZIP包.文件名和路徑都是正確創建,就是文件沒有內容.
我加過斷點調試,傳遞的參數與main方法中是一致的,FTP socket的連接參數除了本地端口一直在變之外.其他都是一致的.
main方法執行結果正常,說明上傳方法是沒問題的.
文件成功在服務器創建,說明Spring注入的連接參數也是沒問題的(吧?)
可是為什麼main就能完整的上傳文件,跨包類(一個在util包下,一個在service包下,)上傳就是空文件,問題在哪呢?
stackoverflow上有個問題很相似,Apache Commons Ftp file uploaded 0 bytes
但他是0字節,我是10字節...而且我也試過答案中的加上和去掉ftpsClient.enterLocalPassiveMode();但是不頂用..
求大神幫忙分析看看出錯原因可能在哪,折騰我一個下午了.
檢查下帶你的異常分支,看看有沒有異常信息。