java ftp实现文件的上传、下载

在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

首先说一下ftp的特点是:传输速度快,适用于上传大文件,适用于局域网络。

ftp上传需要ftp服务器。这里描述客户端的实现。

上传:

/** 
 * Description: 向FTP服务器上传文件 
 * @Version1.0  baomengjie
 * @param url FTP服务器hostname 
 * @param port FTP服务器端口 
 * @param username FTP登录账号 
 * @param password FTP登录密码 
 * @param path FTP服务器保存目录 
 * @param filename 上传到FTP服务器上的文件名 
 * @param input 输入流 
 * @return 成功返回true,否则返回false 
 */  
public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
    boolean success = false;  
    FTPClient ftp = new FTPClient();  
    try {  
        int reply;  
        ftp.connect(url, port);//连接FTP服务器  
        //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
        ftp.login(username, password);//登录  
        reply = ftp.getReplyCode();  
        if (!FTPReply.isPositiveCompletion(reply)) {  
            ftp.disconnect();  
            return success;  
        }  
        ftp.changeWorkingDirectory(path); 
       //设置文件类型(二进制) 
      ftp.setFileType(FTPClient.BINARY_FILE_TYPE); 
        ftp.storeFile(filename, input);              
        input.close();  
        ftp.logout();  
        success = true;  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (ftp.isConnected()) {  
            try {  
                ftp.disconnect();  
            } catch (IOException ioe) {  
            }  
        }  
    }  
    return success;  
}

 下载:

@RequestMapping(value = "/downloadConfigFile")
    public void downloadConfigFile(HttpServletResponse response,@RequestParam("fileName")String fileName) {
         
        response.setCharacterEncoding("UTF-8");
        response.setContentType("multipart/form-data");
         
            FTPClient ftpClient = new FTPClient();
            try { 
                int reply; 
                ftpClient.connect("120.120.120.156",21);
                ftpClient.login("user1", "user1");
                reply = ftpClient.getReplyCode(); 
                if (!FTPReply.isPositiveCompletion(reply)) { 
                    ftpClient.disconnect();
                    return; 
                }
                ftpClient.changeWorkingDirectory("/GOS_CAS/BACKUP/cas_config_backup");//转移到FTP服务器目录 
                FTPFile[] fs = ftpClient.listFiles(); 
                for(int i=0;i<fs.length;i++){ 
                    if(fs[i].getName().equals(fileName)){
                        String saveAsFileName = new String(fs[i].getName().getBytes("UTF-8"), "ISO8859-1"); 
                        response.setHeader("Content-Disposition", "attachment;fileName="+saveAsFileName);
                        OutputStream os = response.getOutputStream();
                        ftpClient.retrieveFile(fs[i].getName(), os);
                        os.flush();
                        os.close();
                        break;
                    }
                }
                ftpClient.logout(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } finally { 
                if (ftpClient.isConnected()) { 
                    try { 
                        ftpClient.disconnect(); 
                    } catch (IOException ioe) { 
                    } 
                } 
            } 
    }

猜你喜欢

转载自bao1073740756-126-com.iteye.com/blog/2212154