1、FTP簡介
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基于不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
2、實例
2.1、添加依賴
1
2
3
4
5
|
<!-- 文件上傳組件 --> < dependency > < groupId >commons-fileupload</ groupId > < artifactId >commons-fileupload</ artifactId > </ dependency > |
2.2測試類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
package testController; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.chenzhengyou.common.util.FtpUtil; import org.junit.Test; import java.io.File; import java.io.FileInputStream; /** * @auther 陳鄭游 * @create 2016-11-23-19:27 * @功能描述 圖片測試 * @公司地址 */ public class FtpController { //主機地址 端口號 private String HOSTNAME = "127.0.0.1" ; private Integer PORT = 21 ; //本地圖片路徑 private String FilePackage = "F:\\Programming_Package\\IMG_3733_1.JPG" ; //用戶名 密碼 private String USERNAME = "czy" ; private String PASSWORD = "czy" ; /** * 無工具類圖片測試 * */ @Test public void testFtp() throws Exception { //創建一個FtpClient對象 FTPClient ftpClient = new FTPClient(); //創建ftp連接。默認是21端口 ftpClient.connect(HOSTNAME,PORT); //登錄ftp服務器,使用用戶名和密碼 ftpClient.login(USERNAME,PASSWORD); //上傳文件。 //讀取本地文件 FileInputStream inputStream = new FileInputStream( new File(FilePackage)); //設置上傳的路徑 ftpClient.changeWorkingDirectory( "/myftp/images" ); //修改上傳文件的格式 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); //第一個參數:服務器端文檔名 //第二個參數:上傳文檔的inputStream ftpClient.storeFile( "hello.jpg" , inputStream); //關閉連接 ftpClient.logout(); } } |
2.3、FTP工具類上傳圖片
工具類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
package org.chenzhengyou.common.util; 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 java.io.*; /** * @auther 陳鄭游 * @create 2016-11-23-19:27 * @功能描述 ftp工具類 * @公司地址 */ public class FtpUtil { /** * Description: 向FTP服務器上傳文件 * @param host FTP服務器hostname * @param port FTP服務器端口 * @param username FTP登錄賬號 * @param password FTP登錄密碼 * @param basePath FTP服務器基礎目錄 * @param filePath FTP服務器文件存放路徑。例如分日期存放:/2015/01/01。文件的路徑為basePath+filePath * @param filename 上傳到FTP服務器上的文件名 * @param input 輸入流 * @return 成功返回true,否則返回false */ public static boolean uploadFile(String host, int port, String username, String password, String basePath, String filePath, String filename, InputStream input) { boolean result = false ; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(host, port); // 連接FTP服務器 // 如果采用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務器 ftp.login(username, password); // 登錄 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return result; } //切換到上傳目錄 if (!ftp.changeWorkingDirectory(basePath+filePath)) { //如果目錄不存在創建目錄 String[] dirs = filePath.split( "/" ); String tempPath = basePath; for (String dir : dirs) { if ( null == dir || "" .equals(dir)) continue ; tempPath += "/" + dir; if (!ftp.changeWorkingDirectory(tempPath)) { if (!ftp.makeDirectory(tempPath)) { return result; } else { ftp.changeWorkingDirectory(tempPath); } } } } //設置上傳文件的類型為二進制類型 ftp.setFileType(FTP.BINARY_FILE_TYPE); //上傳文件 if (!ftp.storeFile(filename, input)) { return result; } input.close(); ftp.logout(); result = true ; } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return result; } /** * Description: 從FTP服務器下載文件 * @param host FTP服務器hostname * @param port FTP服務器端口 * @param username FTP登錄賬號 * @param password FTP登錄密碼 * @param remotePath FTP服務器上的相對路徑 * @param fileName 要下載的文件名 * @param localPath 下載后保存到本地的路徑 * @return */ public static boolean downloadFile(String host, int port, String username, String password, String remotePath, String fileName, String localPath) { boolean result = false ; FTPClient ftp = new FTPClient(); try { int reply; ftp.connect(host, port); // 如果采用默認端口,可以使用ftp.connect(host)的方式直接連接FTP服務器 ftp.login(username, password); // 登錄 reply = ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return result; } ftp.changeWorkingDirectory(remotePath); // 轉移到FTP服務器目錄 FTPFile[] fs = ftp.listFiles(); for (FTPFile ff : fs) { if (ff.getName().equals(fileName)) { File localFile = new File(localPath + "/" + ff.getName()); OutputStream is = new FileOutputStream(localFile); ftp.retrieveFile(ff.getName(), is); is.close(); } } ftp.logout(); result = true ; } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return result; } } |
實現類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package testController; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.chenzhengyou.common.util.FtpUtil; import org.junit.Test; import java.io.File; import java.io.FileInputStream; /** * @auther 陳鄭游 * @create 2016-11-23-19:27 * @功能描述 圖片測試 * @公司地址 */ public class FtpController { //主機地址 端口號 private String HOSTNAME = "127.0.0.1" ; private Integer PORT = 21 ; //本地圖片路徑 private String FilePackage = "F:\\Programming_Package\\IMG_3733_1.JPG" ; //用戶名 密碼 private String USERNAME = "czy" ; private String PASSWORD = "czy" ; /** * 有工具類測試 * */ @Test public void testUtil() throws Exception { FileInputStream inputStream = new FileInputStream( new File( "F:\\Programming_Package\\IMG_3733_1.JPG" )); FtpUtil.uploadFile(HOSTNAME,PORT, USERNAME, PASSWORD, "/myftp/images" , "/2016/11/24" , "hello.jpg" , inputStream); } } |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://blog.csdn.net/javawebrookie/article/details/62439276