1. 程式人生 > >java實現檔案上傳下載至ftp伺服器

java實現檔案上傳下載至ftp伺服器

以前做的一個專案,用到了檔案上傳下載至ftp伺服器,現在對其進行一下複習,比較簡單,一下就能看明白。
環境:首先,先安裝ftp伺服器,我是在win8本地用IIS配置的, 百度一下就可以找到安裝文件。
1.在你的專案目錄下建立ftp配置檔案,目錄如下圖

這裡寫圖片描述

01 ftpconfig.properties:

ftpIp=10.73.222.29
ftpPort=21
ftpUser=WP
ftpPwd=04143114wp
ftpRemotePath=d://share  

02 讀取ftpconfig.properties中的具體內容的類:

 package com.java.core.util;

import
java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * @author wangpei * @version 建立時間:2017年5月6日 下午9:42:40 讀取ftp檔案的配置檔案 */ public class ReadFtpProperties { private InputStream is; private Properties properties; public ReadFtpProperties() { is = this
.getClass().getResourceAsStream("/ftpconfig.properties");// 將配置檔案讀入輸入流中 properties = new Properties(); try { properties.load(is); } catch (IOException e) { System.out.println("配置檔案不存在.."); e.printStackTrace(); } finally { if
(null != is) { try { is.close(); } catch (IOException e) { System.out.println("關閉流失敗.."); e.printStackTrace(); } } } } public String getIp() {// 獲取ftp伺服器的ip地址 return properties.getProperty("ftpIp"); } public String getPort() {// 獲取ftp伺服器的埠 return properties.getProperty("ftpPort"); } public String getUser() {// 獲取ftp登入使用者名稱 return properties.getProperty("ftpUser"); } public String getPwd() {// 獲取ftp伺服器的登入密碼 return properties.getProperty("ftpPwd"); } public String getRemotePath() {// 獲取ftp伺服器的存放檔案的目錄 return properties.getProperty("ftpRemotePath"); } }

03 檔案上傳下載的介面類

package com.java.web.service;

import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import com.java.core.util.ReadFtpProperties;


/**
 * @author wangpei
 * @version 建立時間:2017年5月6日 下午6:39:03 
 * 檔案上傳下載業務邏輯介面層
 */
public interface FtpService {
    /*
     * 登入至FTP
     */
    public boolean loginFTP(FTPClient client, ReadFtpProperties rfp);

    /*
     * 退出ftp
     */
    public boolean logout(FTPClient  client);//

    /*
     * 上傳檔案到remotePath,其在ftp上的名字為inputStream
     */
    public boolean uploadFile(FTPClient client, String remotePath,
            String fileNewName, InputStream inputStream, ReadFtpProperties rfp);

    /*
     * 從目錄remotePath,下載檔案fileName
     */
    public InputStream downFileByFtp(FTPClient client, String remotePath,
            String fileName);

    /*
     * 刪除ftp上的目錄為pathName的檔案
     */
    public boolean delFile(FTPClient client, String pathName);

}

04 檔案上傳下載的介面實現類

package com.java.web.service.serviceImpl;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import com.java.core.util.ReadFtpProperties;
import com.java.web.service.FtpService;

/**
 * @author wangpei
 * @version 建立時間:2017年5月6日 下午10:02:28 類說明
 */
public class FtpServiceImpl implements FtpService {

    public boolean loginFTP(FTPClient client, ReadFtpProperties rfp) {
        String ftpIp = rfp.getIp();
        String ftpPort = rfp.getPort();
        String ftpUser = rfp.getUser();
        String ftpPwd = rfp.getPwd();
        // String fgtpRemotePath = rfp.getRemotePath();
        boolean b = false;

        try {
            client.connect(ftpIp, Integer.parseInt(ftpPort));
        } catch (NumberFormatException e) {
            System.out.println("無法連線到ftp");
            return false;
        } catch (SocketException e) {
            System.out.println("無法連線到ftp");
            return false;
        } catch (IOException e) {
            System.out.println("無法連線到ftp");
            return false;
        }
        client.setControlEncoding("uft-8");
        try {
            b = client.login(ftpUser, ftpPwd);
        } catch (IOException e) {
            System.out.println("登入ftp出錯");
            logout(client);// 退出/斷開FTP伺服器連結
            return false;
        }
        return b;

    }

    public boolean logout(FTPClient client) {
        boolean b = false;

        try {
            b = client.logout();// 退出登入
            client.disconnect();// 斷開連線
        } catch (IOException e) {
            return false;
        }
        return b;

    }

    public boolean uploadFile(FTPClient client, String remotePath,
            String fileNewName, InputStream inputStream, ReadFtpProperties rfp) {
        boolean b = false;
        try {
            client.setFileType(FTPClient.BINARY_FILE_TYPE);
            client.enterLocalPassiveMode();
            if (remotePath != null && !"".equals(remotePath.trim())) {
                String[] pathes = remotePath.split("/");
                for (String onepath : pathes) {
                    if (onepath == null || "".equals(onepath.trim())) {
                        continue;
                    }

                    onepath = new String(onepath.getBytes("utf-8"),
                            "iso-8859-1");
                    System.out.println("onepath=" + onepath);
                    if (!client.changeWorkingDirectory(onepath)) {
                        client.makeDirectory(onepath);// 建立FTP伺服器目錄
                        client.changeWorkingDirectory(onepath);// 改變FTP伺服器目錄
                    } else {
                        System.out.println("檔案單路徑");
                    }
                }
            }
            b = client.storeFile(new String(fileNewName.getBytes("utf-8"),
                    "iso-8859-1"), inputStream);
        } catch (UnsupportedEncodingException e) {
            return false;
        } catch (IOException e) {
            return false;
        }
        return b;
    }

    public InputStream downFileByFtp(FTPClient ftpClient, String remotePath,
            String fileName) {

        FTPFile[] fs;
        InputStream is = null;
        try {
            // 設定被動模式
            ftpClient.enterLocalPassiveMode();
            // 設定以二進位制流的方式傳輸
            ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
            // 設定編輯格式
            ftpClient.setControlEncoding("utf-8");

            remotePath = remotePath.substring(0,
                    remotePath.lastIndexOf(fileName));
            fs = ftpClient.listFiles(remotePath);// 遞迴目標目錄
            for (FTPFile ff : fs) {
                if (ff.getName().equals(fileName)) {// 查詢目標檔案
                    is = ftpClient.retrieveFileStream(new String(
                            (remotePath + fileName).getBytes("utf-8"),
                            "iso-8859-1"));
                    break;
                }
            }

        } catch (IOException e) {

            e.printStackTrace();
        }
        return is;

    }

    public boolean delFile(FTPClient ftpClient, String pathName) {
        boolean b = false;

        try {
            b = ftpClient.deleteFile(pathName);

            return b;
        } catch (Exception e) {
            return false;
        } finally {
            logout(ftpClient);// 退出/斷開FTP伺服器連結
        }

    }

}

程式碼很好理解,看一遍應該就可以理解,在這兒就不具體分析了,主要看程式碼中的註釋。

相關推薦

java實現檔案下載ftp伺服器

以前做的一個專案,用到了檔案上傳下載至ftp伺服器,現在對其進行一下複習,比較簡單,一下就能看明白。 環境:首先,先安裝ftp伺服器,我是在win8本地用IIS配置的, 百度一下就可以找到安裝文件。 1.在你的專案目錄下建立ftp配置檔案,目錄如下圖

java實現檔案下載的三種方法

JSP+Servlet 一、檔案上傳下載原理 在TCP/IP中,最早出現的檔案上傳機制是FTP。它是將檔案由客戶端傳送到伺服器的標準機制。但是在jsp程式設計中不能使用FTP方法來上傳檔案,這是由jsp的執行機制所決定的。 通過為表單元素設定Method=“post” en

Java實現檔案下載

上面的博文我寫了Java對檔案操作的功能https://blog.csdn.net/qq_24380635/article/details/83273359,這次記錄一下檔案上傳和下載的功能。看看兩者有什麼不同,就可以知道檔案操作和檔案上傳下載有什麼不同了。我也是一點點懂,也

Java實現檔案下載的三種解決方案

第一點:Java程式碼實現檔案上傳   FormFile file=manform.getFile();    String newfileName = null;   String newpathname=null;   String fileAddre="/numU

java web 一行程式碼實現檔案下載

       每當要實現檔案上傳下載的功能時,都要複製貼上拼湊程式碼。如果用了不同的框架,程式碼還不一樣,配置啥的一堆,甚是繁瑣,不喜歡。科學家們喜歡把紛繁複雜的自然現象總結為一個個簡潔的公式,我們也來試試,把上傳下載整成一行程式碼~        花了一天時間,整了個通用

Java 使用 SFTP 實現檔案下載(二)

package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraf

java實現檔案ftp伺服器功能

 java檔案上傳至ftp伺服器         廢話不多說,直接上程式碼,這裡提供兩種方法,此程式執行需要下載apache-commons-net.jar包,可以使用maven倉庫下載,也可以使用http://www.java2s.com/搜尋下載。 第一種方法:使用下

java實現檔案下載

           東風化宇,檔案上傳 一、對於檔案上傳,瀏覽器在上傳的過程中是將檔案以流的形式提交到伺服器端的,Servlet獲取上傳檔案的輸入流然後再解析裡面的請求引數是比較麻煩。 JSP程式碼,POST請求,表單必須設定為enctype="multipar

HTTP POST請求報文格式分析與Java實現檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Struts2 實現檔案下載

檔案上傳對Struts2來說是一件非常容易的事情。Struts2檔案上傳依賴如下jar包 commons-fileupload-x.x.x.jar commons-io-x.x.x.jar 檔案上傳大致步驟: 編寫頁面 配置struts.xml 攔截器會自動接收上傳的檔

java實現檔案_後端

maven: <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <ver

JspSmartUpload 實現檔案下載及Mysql實現分頁

一、寫在前面 這篇文章主要是分享使用JspSamrtUpload實現多檔案的上傳下載功能,及使用Mysql資料庫的 limit 函式實現檔案顯示列表的分頁顯示功能。 二、需要的jar包 下載後把它複製到web的lib目錄下即可。 三、關鍵程式碼 3.1 多檔案上傳前

MAC實用SSH連線遠端伺服器,並實現檔案下載

MAC作為程式設計師的神器,在程式設計上的使用遠超window的電腦,而MAC本身提供了SSH功能,配合VIM編輯器對程式設計十分有幫助。 使用ssh連線遠端主機   sudo -i 切換root許可權 ssh [email protected] 其中,

React中使用fetch實現檔案下載

在最近的專案中需要實現檔案上傳下載功能,在以前spring、jsp的專案中實現檔案上傳很簡單,但現在前後端分離,前端使用React,後端使用Spring Boot,實現就沒那麼方便了。 前端React使用fetch而非傳統的XMLHttpRequest從後端獲取

SpringMVC——實現檔案下載

一、檔案上傳 1.引入依賴包 在pom.xml檔案中新增如下內容,引入 commons-fileupload 和 commons-io 兩個包。 <dependency> <groupId>commons-f

Flask 實現檔案下載功能

檔案下載的兩種方法, 一是構建檔案url,二是使用flask.send_from_directory(directory, filename, **options),介紹第一種方法,是我寫著寫著就發現的,第二種方法就查api吧,不介紹了。 檔案下載一般都是先有一

Jsp+Servlet實現檔案下載——前臺頁面開發

       JSP和Servlet都是J2EE的規範,JSP全名為Java Server Pages,中文名叫java伺服器頁面,它是在傳統的網頁HTML檔案中插入Java程式段(Scriptlet

spring boot實現檔案下載以及多檔案

首先是很簡單的介面,在resource/static下建立檔案file.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymel

完整實現檔案下載以及輸出下載列表

首先匯入jar包: commons-fileupload-1.2.1.jar 【檔案上傳元件核心jar包】 commons-io-1.4.jar 【封裝了對檔案處理的相關工具類】 jsp程式碼: 功能選擇: &

FastDFS實現檔案下載實戰

       正好,淘淘商城講這一塊的時候,我又想起來當時老徐讓我寫過一個關於實現FastDFS實現檔案上傳下載的使用文件,當時結合我們的ITOO的視訊系統和畢業論文系統,整理了一下,有根據網上查到的知識,總結了一點東西,下面分享一下 一、FastDFS簡介: