使用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进行文件的上传和下载部分的代码,记录下来以便我日后学习。

 

posted @ 2016-03-14 15:00  空谷幽澜  阅读(5849)  评论(0编辑  收藏  举报