FTP方式的文件上傳和下載的Java代碼

jopen 11年前發布 | 54K 次閱讀 FTP Java開發

 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; }

}</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!