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