ติดตั้ง FTP server ก่อน – ใช้ Filezilla Server
เปิดใช้งาน services -> Filezilla-server

เลือกใช้งาน Apache commons net

/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
*/
package ftpuploader;
/**
*
* @author Thada
*/
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
/**
* คลาสนี้สาธิตวิธีการอัปโหลดไฟล์ไปยังเซิร์ฟเวอร์ FTP โดยใช้ไลบรารี Apache Commons Net
* คุณจำเป็นต้องเพิ่ม dependency ของ Apache Commons Net ในโปรเจกต์ของคุณก่อน
*
* สำหรับ Maven, เพิ่มในไฟล์ pom.xml:
* <dependency>
* <groupId>commons-net</groupId>
* <artifactId>commons-net</artifactId>
* <version>3.11.0</version>
* </dependency>
*/
public class FTPUploader {
private final String server;
private final int port;
private final String user;
private final String pass;
/**
* Constructor เพื่อรับข้อมูลการเชื่อมต่อ FTP
* @param server ที่อยู่ของ FTP server (เช่น ftp.example.com)
* @param port พอร์ตของ FTP server (ปกติคือ 21)
* @param user ชื่อผู้ใช้
* @param pass รหัสผ่าน
*/
public FTPUploader(String server, int port, String user, String pass) {
this.server = server;
this.port = port;
this.user = user;
this.pass = pass;
}
/**
* เมธอดสำหรับอัปโหลดไฟล์เดียวไปยังเซิร์ฟเวอร์ FTP
* @param localFilePath พาธของไฟล์บนเครื่องคอมพิวเตอร์ของคุณ
* @param remoteFilePath พาธและชื่อไฟล์ที่ต้องการบันทึกบนเซิร์ฟเวอร์ FTP
* @throws IOException เมื่อเกิดปัญหาในการเชื่อมต่อหรือการส่งไฟล์
*/
public void uploadFile(String localFilePath, String remoteFilePath) throws IOException {
FTPClient ftpClient = new FTPClient();
try {
// 1. เชื่อมต่อและล็อกอิน
System.out.println("Connecting to " + server + "...");
ftpClient.connect(server, port);
boolean loggedIn = ftpClient.login(user, pass);
if (!loggedIn) {
System.out.println("Cannot login, please check user & password");
return;
}
System.out.println("Login successfully");
// 2. ตั้งค่าโหมดและประเภทไฟล์
ftpClient.enterLocalPassiveMode(); // โหมด Passive สำคัญมากสำหรับเครือข่ายที่มี Firewall
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // ตั้งเป็นโหมดไบนารีเพื่อรองรับไฟล์ทุกประเภท
// 3. เตรียมไฟล์สำหรับอัปโหลด
File localFile = new File(localFilePath);
if (!localFile.exists()) {
System.out.println("Cannot find: " + localFilePath);
return;
}
// 4. ทำการอัปโหลด
try (InputStream inputStream = new FileInputStream(localFile)) {
System.out.println("Start uploading the file: " + localFile.getName());
boolean done = ftpClient.storeFile(remoteFilePath, inputStream);
if (done) {
System.out.println("File '" + localFile.getName() + "' uploaded successfully");
} else {
System.out.println("Upload fail");
// สามารถตรวจสอบ reply code เพิ่มเติมได้
// System.out.println("FTP Reply: " + ftpClient.getReplyString());
}
}
} finally {
// 5. ออกจากระบบและตัดการเชื่อมต่อเสมอ
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
System.setOut(new PrintStream(System.out, true, "UTF-8"));
System.out.println("System.encoding: " + System.getProperty("file.encoding"));
System.out.println("Disconnected");
System.out.println("ตัดการเชื่อมต่อแล้ว");
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* เมธอด main สำหรับทดสอบการทำงาน
*/
public static void main(String[] args) {
// --- กรุณากรอกข้อมูล FTP ของคุณที่นี่ ---
String server = "127.0.0.1"; // <--- ใส่ชื่อเซิร์ฟเวอร์ของคุณ
int port = 21;
String user = "th"; // <--- ใส่ชื่อผู้ใช้ของคุณ
String pass = "12345678"; // <--- ใส่รหัสผ่านของคุณ
// ------------------------------------
FTPUploader uploader = new FTPUploader(server, port, user, pass);
try {
// --- ระบุพาธไฟล์ของคุณ ---
// ตัวอย่างสำหรับ Windows: "C:/Users/YourUser/Documents/report.pdf"
// ตัวอย่างสำหรับ macOS/Linux: "/home/youruser/documents/report.pdf"
File localFilePath = new File("C:\\Users\\Thada\\Desktop\\gen.info\\attribute.txt"); // <--- ใส่พาธไฟล์ในเครื่องของคุณ
String localFileName = localFilePath.getName();
String remoteFilePath = "/tmp/" + localFileName; // <--- ใส่พาธบนเซิร์ฟเวอร์
// -------------------------
uploader.uploadFile(localFilePath.toString(), remoteFilePath);
} catch (IOException ex) {
System.err.println("เกิดข้อผิดพลาดร้ายแรงระหว่างการอัปโหลด");
ex.printStackTrace();
}
}
}
Connecting to 127.0.0.1... Login successfully Start uploading the file: attribute.txt File 'attribute.txt' uploaded successfully System.encoding: UTF-8 Disconnected ตัดการเชื่อมต่อแล้ว
ถ้าไม่ได้เปิด service เอาไว้
Connecting to 127.0.0.1... เกิดข้อผิดพลาดร้ายแรงระหว่างการอัปโหลด java.net.ConnectException: Connection refused: getsockopt at java.base/sun.nio.ch.Net.pollConnect(Native Method) at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:628) at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:533) at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:583) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:282) at java.base/java.net.Socket.connect(Socket.java:665) at org.apache.commons.net.SocketClient._connect(SocketClient.java:141) at org.apache.commons.net.SocketClient.connect(SocketClient.java:308) at org.apache.commons.net.SocketClient.connect(SocketClient.java:290) at ftpuploader.FTPUploader.uploadFile(FTPUploader.java:64) at ftpuploader.FTPUploader.main(FTPUploader.java:136) BUILD SUCCESSFUL (total time: 0 seconds)

