使用FTPClient進行文件服務器內文件的上傳和下載


我用的FTPClient是由Apache組織的commons-net.jar包中的API,這個包用起來非常的方便,很容易上手。我在項目開發的過程中主要用到了文件的上傳和下載功能,下面將我開發的代碼貼出來供大家學習:

文件上傳到文件服務器:在該部分內我遇到的主要問題上文件名亂碼,word文檔內容亂碼,解決辦法在代碼中已經注釋了,希望可以幫助到大家。

 

 1 /**
 2 * 上傳部分代碼如下:
 3 * @param url:文件服務器主機地址
 4 * @param port:文件服務器端口號
 5 * @param username:用戶名
 6 * @param password:密碼
 7 * @param path:文件要保存的路徑
 8 * @param filename:文件名字
 9 * @param input:文件輸入流,即從本地服務器讀取文件的IO輸入流
10 * @return
11 */
12 public static boolean uploadToFTPServer(String url,int port,String username,String password,String path,String filename,InputStream input)
13 { 
14 boolean success = false; //判斷文件是否上傳成功 
15 FTPClient ftp = new FTPClient(); //創建一個客戶端實例 
16 try { 
17 int reply; 
18 ftp.connect(url, port);//連接FTP服務器 
19 //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器 
20 ftp.login(username, password);//登錄 
21 reply = ftp.getReplyCode(); //獲得返回的代碼,來判斷連接狀態 
22 
23 if (!FTPReply.isPositiveCompletion(reply)) { 
24 ftp.disconnect(); 
25 return success; 
26 } 
27 // ftp.makeDirectory("bbb");//創建文件目錄
28 ftp.changeWorkingDirectory(path);
29 ftp.setFileType(FTP.BINARY_FILE_TYPE);//設置文件以二進制的形式上傳,防止文件內容亂碼出現
30 //設置文件名字的編碼格式為iso-8859-1,因為FTP上傳的時候默認編碼為iso-8859-1,解決文件名字亂碼的問題
31 filename = new String(filename.getBytes("GBK"),"iso-8859-1");
32 ftp.storeFile(filename, input); //開始上傳文件 
33 input.close();//關閉文件輸入流
34 ftp.logout();//斷開和ftp服務器之間的連接
35 success = true; 
36 } catch (IOException e) { 
37 e.printStackTrace(); 
38 } finally { 
39 if (ftp.isConnected()) { 
40 try { 
41 ftp.disconnect(); 
42 } 
43 catch (IOException ioe) { 
44 } 
45 } 
46 } 
47 return success; 
48 
49 }

從文件服務器下載文件:

 

 1     public static void downloadFromFileServer(String url,int port,String username,String password,String path,HttpServletRequest request, HttpServletResponse response) throws SocketException, IOException
 2     {
 3         //boolean success = false;  //判斷文件是否上傳成功 
 4         FTPClient ftp = new FTPClient();  //創建一個客戶端實例 
 5         
 6         ftp.connect(url, port);//連接FTP服務器    
 7         //如果采用默認端口,可以使用ftp.connect(url)的方式直接連接FTP服務器    
 8         ftp.login(username, password);//登錄    
 9         int reply = ftp.getReplyCode(); //獲得返回的代碼,來判斷連接狀態  
10         ftp.changeWorkingDirectory("bbb");//轉移到FTP服務器目錄 
11         if (!FTPReply.isPositiveCompletion(reply)) {   
12             ftp.disconnect();   
13         }   
14         //File localFile = new File(request.getServletContext().getRealPath("/upload/")+"12345678.doc");    
15         //OutputStream is = new FileOutputStream(localFile);     
16        // ftp.retrieveFile("1234.doc", is);  
17         
18         
19         FTPFile[] fs = ftp.listFiles(); 
20 
21         for(FTPFile ff:fs){ 
22             if(ff.getName().equals("abc.txt")){//如果找到abc.txt則進行下載 ,可以自己設置要下載的文件名稱
23                 //設置要下載到的目錄
24                 File localFile = new File(request.getServletContext().getRealPath("/upload")+"/12345678.doc");    
25                //得到輸出流
26                 OutputStream is = new FileOutputStream(localFile);  
27                 ftp.retrieveFile(ff.getName(), is); //開始下載文件
28                 is.close(); 
29             } 
30         }
31         
32         ftp.logout();
33     }
34 }

以上即為我在使用FTPClient進行文件的上傳和下載部分的代碼,記錄下來以便我日后學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM