1. 程式人生 > >初次接觸FTPclient

初次接觸FTPclient

參與了一個基於Spring MVC框架的網站開發,其他帶過,其中有個模組涉及到檔案的上傳功能,使用了js 的uploadfiy外掛,上傳時還會有百分比的進度條,後臺使用FileOutputStream的write方法,在此碰到了個問題,上傳檔案大小總有限制,最開始僅能上傳100M以下的檔案。

網上搜索出很多建議:改spring的配置檔案

<property name="maxUploadSize">
<value>999999999999</value>
</property>

改uploadfiy的引數sizeLimit (上傳檔案的大小限制)。

這兩個都更改了後,效果還是不大,有時候是上傳的進度條到百分之幾時就會中斷,然後報IO error錯誤,有時候是進度條跑完後,後臺程式報異常。

還有建議是改網站伺服器的配置,改tomcat配置。(不知道有用沒)

感覺上傳的controller應該要換一種方式試試,於是看到了FTPCLient,貌似這個上傳檔案比HTTP協議穩定,而且還支援斷點續傳(不會用),都不知怎麼開始用,感覺莫名其妙,於是各種找demo,終於找到一個能用的:

<span style="white-space:pre">	</span>FTPClient ftpClient = new FTPClient(); 
        FileInputStream fis = null; 
        try { 
            ftpClient.connect("192.168.14.117"); 
            ftpClient.login("admin", "123"); 
            File srcFile = new File("C:\\new.gif"); 
            fis = new FileInputStream(srcFile); 
            //設定上傳目錄 
            ftpClient.changeWorkingDirectory("/admin/pic"); 
            ftpClient.setBufferSize(1024); 
            ftpClient.setControlEncoding("GBK"); 
            //設定檔案型別(二進位制) 
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 
            ftpClient.storeFile("3.gif", fis); 
        } catch (IOException e) { 
            e.printStackTrace(); 
            throw new RuntimeException("FTP客戶端出錯!", e); 
        } finally { 
            IOUtils.closeQuietly(fis); 
            try { 
                ftpClient.disconnect(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
                throw new RuntimeException("關閉FTP連線發生異常!", e); 
            } 
        } 
(程式碼來源於網路)
當ftpClient.storeFile 方法返回ture時,就說明上傳成功了,此時注意要新增jar包,我用的是commons-net-3.3.jar,專案匯入此包後,還要將這個包複製一份到tomcat的lib目錄下,否則會找不到這個類,做完這個後,卻還是返回了false,又在網上看到

呼叫FTPClient.enterLocalPassiveMode();這個方法的意思就是每次資料連線之前,ftp client告訴ftp server開通一個埠來傳輸資料。為什麼要這樣做呢,因為ftp server可能每次開啟不同的埠來傳輸資料,但是在linux上,由於安全限制,可能某些埠沒有開啟,所以就出現阻塞。


於是我加入了這個方法,果然就ok了,改動之後,上傳的檔案大小能到四五百兆。

總結:方法是找到了,但是還是知其然不知其所以然,慚愧啊,都不知道原因到底在哪,唉,再一個就是,如果上傳再大些的檔案,uploadfiy的進度條到不了5%就斷掉了,然後還是報IO error,覺得還是這個js外掛沒弄好。第一次寫哈,請多包涵嘿嘿,記錄下這個過程以便複習,這其中還有好多沒弄明白的緣由,希望大神們多多賜教。