【问题分析】FTP文件上传与下载

问题描述:通常应用服务器与文件服务器分别在不同的机器上,涉及到文件的上传与下载。通过建立网络映射盘的形式,将文件服务器保存文件的文件夹映射到应用服务器的某个盘符下,经过试验,在tomcat下两台笔记本是可以实现的,但是在生产环境的websphere下试验,经过多番尝试,仍然实现不了。

问题分析:采用FTP的方式实现文件的上传与下载功能,在Java代码中编写客户端的上传与下载,在文件服务器上,直接装一个FTP服务器软件即可。注意生产环境的防火墙以及客户是否允许使用FTP。

解决方案:

  1. 工程中导入JAR包;(见附件)

  2. 编写客户端FTP类;

  3. 服务器安装FTP服务器软件,并配置文件夹;(详见附件文档中说明)

     

package com.common.util;

 

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

 

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPReply;

 

/**

 * 处理文件上传下载的工具类

 * @author Administrator

 *

 */

publicclass FtpUtils {

  

   /**

    * 连上ftp 服务器

    * @param path  FTP服务器保存目录

    * @param addr  FTP服务器hostname

    * @param port  FTP服务器端口

    * @param username FTP登录账号

    * @param password FTP登录密码

    * @return

    * @throws Exception

    */

    publicstatic FTPClient connect(String path,String addr,int port,String username,String password) throws Exception {     

 

          FTPClient ftp = new FTPClient();     

          int reply;     

          ftp.connect(addr,port);     

          ftp.login(username,password);     

          ftp.setFileType(FTPClient.BINARY_FILE_TYPE);     

          reply = ftp.getReplyCode();     

          if (!FTPReply.isPositiveCompletion(reply)) {     

              ftp.disconnect();     

              returnnull;     

          }     

          ftp.changeWorkingDirectory(path);          

          return ftp;     

      }

 

   /**

    * 上传文件

    * @param file 上传到FTP服务器上的文件路径

    * @param ftp

    * @throws Exception

    */

    publicstaticvoid upload(FTPClient ftp,File file) throws Exception{     

        if(file.isDirectory()){          

            ftp.makeDirectory(file.getName());               

            ftp.changeWorkingDirectory(file.getName());     

            String[] files = file.list();            

            for (int i = 0; i < files.length; i++) {     

                File file1 = new File(file.getPath()+"\\"+files[i] );     

                if(file1.isDirectory()){     

                    upload(ftp,file1);     

                    ftp.changeToParentDirectory();     

                }else{                   

                    File file2 = new File(file.getPath()+"\\"+files[i]);     

                    FileInputStream input = new FileInputStream(file2);     

                    ftp.storeFile(file2.getName(), input);     

                    input.close();                           

                }                

            }     

        }else{     

            File file2 = new File(file.getPath());     

            FileInputStream input = new FileInputStream(file2);     

            ftp.storeFile(file2.getName(), input);     

            input.close();       

        }     

    }

    

    /**

     * 文件下载

     * @param ftp

     * @param remoteFileName FTP服务器上的文件名称

     * @param localFileName 下载后保存到本地的文件路径

     * @throws IOException

     */

    publicstaticvoid download(FTPClient ftp,String remoteFileName, String localFileName) throws IOException {

       boolean flag = true;

         // 下载文件

         BufferedOutputStream buffOut = null;

         try {

                 buffOut = new BufferedOutputStream(new FileOutputStream(localFileName));

                 flag = ftp.retrieveFile(remoteFileName, buffOut);

                 if(!flag)

                    thrownew IOException("下载过程发生异常。");

         } finally {

                 try {

                         if (buffOut != null)

                                 buffOut.close();

                 } catch (Exception e) {

                         //e.printStackTrace();

                 }

         }

 

    }

 

    /**

     * 断开连接

     * @param ftp

     */

    publicstaticvoid disconnect(FTPClient ftp) {

       try {

         ftp.disconnect();

      } catch (IOException e) {

         //

      }

    }

    

    /**

     * @Test测试文件上传与下载

     * @param args

     */

    publicstaticvoid main(String args[]) {

       FTPClient ftpClient;

       try {

          //与服务器连接

          ftpClient = FtpUtils.connect("D:/inner","127.0.0.1",21,"test","test");

          //上传文件

          File file = new File("D:/test.txt");

          FtpUtils.upload(ftpClient,file);

          file.delete();

          //下载文件

          FtpUtils.download(ftpClient,"test.txt","E:/test.txt");

          //断开连接

          FtpUtils.disconnect(ftpClient);

      } catch (Exception e) {

         System.out.println("ftp文件上传(或下载)失败!");

         e.printStackTrace();

      }

       

       

    }

 

}

 

 

//注意相关配置最好写到配置文件中。

本文出自 “HAPPY_CANDY” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。