Java實現FTP上傳檔案到Linux伺服器的那些坑
阿新 • • 發佈:2018-12-14
一、Linux安裝FTP服務
首先Linux伺服器需要安裝FTP服務,步驟如下:
1、執行如下ftp服務安裝命令:
yum install vsftpd
可能會出現如下錯誤:
"Couldn't open file /mnt/repodata/repomd.xml"
執行如下掛載命令後重新安裝即可:
mount /dev/cdrom /mnt
2、啟動ftp服務
命令:
開啟:# service vsftpd start
關閉:# service vsftpd stop
3、ftp預設使用者
ftp預設的使用者為test,ftp目錄為/home/test。在Linux中建立新使用者,如下:
# useradd -d /home/test test //增加使用者test,並制定test使用者的主目錄為/home/test
# passwd test //為test設定密碼
# userdel test //刪除test使用者
二、Java實現檔案上傳
ftp依賴的jar包的pom.xml檔案如下:
<dependency> <!-- ftp --> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>
具體程式碼:
package com.leboop.util; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import java.io.*; import java.util.Date; /** * Created by leboop on 2018/8/28. */ public class FtpUtil { //伺服器ip地址 private static String url = "192.168.189.111"; //FTP埠,預設是21(注意:SSH預設22) private static int port = 21; //登入使用者名稱 private static String username = "test"; //登入密碼 private static String password = "11111111"; /將字串寫入檔案上傳至伺服器 public static boolean upload() { //寫入檔案的字串 String cityStr = "Hello World"; boolean success = false; FTPClient ftp = new FTPClient(); try { int reply; ftp.setControlEncoding("UTF-8"); //連線FTP伺服器 ftp.connect(url, port); //如果採用預設埠,可以使用ftp.connect(url)的方式直接連線FTP伺服器 ftp.login(username, password); //如果reply的值是230,表示連線成功,530可能是使用者名稱或者密碼錯誤 //500可能是/home/test目錄不存在 reply = ftp.getReplyCode(); System.out.println(reply); if (!FTPReply.isPositiveCompletion(reply)) { ftp.disconnect(); return success; } long date = new Date().getTime(); String filename = date + "ftp.csv"; byte[] cBytes= cityStr.getBytes(); //字串轉換為位元組陣列 InputStream input = new ByteArrayInputStream(cBytes); ftp.enterLocalPassiveMode(); //需要新增這行程式碼,不然上傳的檔案為空 ftp.setFileType(FTP.BINARY_FILE_TYPE); boolean g = ftp.storeFile(filename, input); System.out.println("上傳伺服器:" + g); input.close(); ftp.logout(); success = true; } catch (IOException e) { e.printStackTrace(); } finally { if (ftp.isConnected()) { try { ftp.disconnect(); } catch (IOException ioe) { } } } return success; } }