FTP方式的文件上传和下载的Java代码

jopen 11年前

 import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;    import javax.servlet.http.HttpServletResponse;    import org.apache.commons.net.ftp.FTP;  import org.apache.commons.net.ftp.FTPClient;  import org.apache.commons.net.ftp.FTPFile;  import org.apache.commons.net.ftp.FTPReply;    import com.zte.paas.common.SysConstants;    /**   * 处理Ftp文件的上传和下载   *   * @author zhaofeng   *   */  public class FtpTool {        /**       * Description: 向FTP服务器上传文件       *       * @param url       *            FTP服务器hostname       * @param username       *            FTP登录账号       * @param password       *            FTP登录密码       * @param path       *            FTP服务器保存目录       * @param filename       *            上传到FTP服务器上的文件名       * @param input       *            输入流       * @return 成功返回true,否则返回false       */      public boolean uploadFile(String url, String username, String password,              String path, String filename, InputStream input) {          boolean success = false;          FTPClient ftp = new FTPClient();          try {              int reply;              ftp.connect(url);              ftp.login(username, password);              reply = ftp.getReplyCode();              if (!FTPReply.isPositiveCompletion(reply)) {                  ftp.disconnect();                  return success;              }              // 转到指定上传目录              ftp.changeWorkingDirectory(path);              ftp.setFileType(FTP.BINARY_FILE_TYPE); // 设置为2进制上传              // 将上传文件存储到指定目录              ftp.storeFile(filename, input);              ftp.logout();              input.close();              success = true;          } catch (IOException e) {              e.printStackTrace();          } finally {              if (ftp.isConnected()) {                  try {                      ftp.disconnect();                  } catch (IOException e) {                      e.printStackTrace();                  }              }          }          return success;      }        /**       * Description: 从FTP服务器下载文件       *       * @param url       *            FTP服务器hostname       * @param username       *            FTP登录账号       * @param password       *            FTP登录密码       * @param remotePath       *            FTP服务器上的相对路径       * @param fileName       *            下载时的默认文件名       * @param localPath       *            下载后保存到本地的路径       * @return       */      public boolean downFile(String url, String username, String password,              String remotePath, String fileName, HttpServletResponse response) {          // 初始表示下载失败          boolean success = false;          // 创建FTPClient对象          FTPClient ftp = new FTPClient();          try {              int reply;              // 连接FTP服务器              // 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器              ftp.connect(url);              // 登录ftp              ftp.login(username, password);              reply = ftp.getReplyCode();              if (!FTPReply.isPositiveCompletion(reply)) {                  ftp.disconnect();                  return success;              }              String realName = remotePath                      .substring(remotePath.lastIndexOf("/") + 1);              // 转到指定下载目录              ftp.changeWorkingDirectory(SysConstants.FTP_PATH);              ftp.setFileType(FTP.BINARY_FILE_TYPE);              // 列出该目录下所有文件              // 设置文件下载头部              response.setContentType("application/x-msdownload");// 设置编码              response.setHeader("Content-Disposition", "attachement;filename="                      + new String(fileName.getBytes(), "ISO-8859-1"));              FTPFile[] fs = ftp.listFiles();              // 遍历所有文件,找到指定的文件              for (FTPFile ff : fs) {                  if (ff.getName().equals(realName)) {                      OutputStream out = response.getOutputStream();                      InputStream bis = ftp.retrieveFileStream(realName);                        // 根据绝对路径初始化文件                      // 输出流                      int len = 0;                      byte[] buf = new byte[1024];                      while ((len = bis.read(buf)) > 0) {                          out.write(buf, 0, len);                          out.flush();                      }                      out.close();                      bis.close();                  }              }              ftp.logout();              // 下载成功              success = true;          } catch (IOException e) {              e.printStackTrace();          } finally {              if (ftp.isConnected()) {                  try {                      ftp.disconnect();                  } catch (IOException ioe) {                  }              }          }          return success;      }    }