이렇게 하면 file이 업로드 되었을때, 이벤트도 받을 수 있다.
<dependency>
<groupId>org.apache.ftpserver</groupId>
<artifactId>ftpserver-core</artifactId>
<version>1.1.1</version>
</dependency>
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Ftplet;
import org.apache.ftpserver.ftplet.FtpletContext;
import org.apache.ftpserver.ftplet.FtpletResult;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@Component
public class EmbeddedFtpServer {
@PostConstruct
public void startFtpServer() {
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
// Set the port of the listener
factory.setPort(2221);
serverFactory.addListener("default", factory.createListener());
// Setup user manager
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File("users.properties"));
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
serverFactory.setUserManager(userManagerFactory.createUserManager());
// Add Ftplet to handle FTP events
Map<String, Ftplet> ftplets = new HashMap<>();
ftplets.put("eventListenerFtplet", new EventListenerFtplet());
serverFactory.setFtplets(ftplets);
// Start the server
FtpServer server = serverFactory.createServer();
try {
server.start();
System.out.println("Embedded FTP server started.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
이벤트 수신
import org.apache.ftpserver.ftplet.*;
import java.io.IOException;
public class EventListenerFtplet extends DefaultFtplet {
@Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
System.out.println("Start uploading file: " + request.getArgument());
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
System.out.println("Finished uploading file: " + request.getArgument());
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult onConnect(FtpSession session) throws FtpException, IOException {
System.out.println("User connected: " + session.getUser().getName());
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult onDisconnect(FtpSession session) throws FtpException, IOException {
System.out.println("User disconnected: " + session.getUser().getName());
return FtpletResult.DEFAULT;
}
}
사용자까지 설정한 예제는:
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.SaltedPasswordEncryptor;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.File;
@Component
public class EmbeddedFtpServer {
@PostConstruct
public void startFtpServer() {
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
// Set the port of the listener
factory.setPort(2221);
serverFactory.addListener("default", factory.createListener());
// Setup user manager
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
var userManager = userManagerFactory.createUserManager();
// Create a new user
BaseUser user = new BaseUser();
user.setName("user1");
user.setPassword("pass1");
user.setHomeDirectory("/path/to/root/folder1");
user.setEnabled(true);
// Set permissions if needed (e.g., write permission)
userManager.save(user);
serverFactory.setUserManager(userManager);
// Start the server
FtpServer server = serverFactory.createServer();
try {
server.start();
System.out.println("Embedded FTP server started.");
} catch (Exception e) {
e.printStackTrace();
}
}
}