자바 FTPServer에 파일을 업로드하려고합니다.자바 아파치 FTPServer 및 common.net FTPClient
파일 전송은 정상이지만 업로드 된 모든 파일에는 추가 6ko 데이터가 있습니다.
package com.cs3Drender.ftpservice;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Local;
import org.apache.ftpserver.FtpServer;
import org.apache.ftpserver.FtpServerFactory;
import org.apache.ftpserver.ftplet.Authority;
import org.apache.ftpserver.ftplet.FtpException;
import org.apache.ftpserver.ftplet.UserManager;
import org.apache.ftpserver.listener.ListenerFactory;
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory;
import org.apache.ftpserver.usermanager.SaltedPasswordEncryptor;
import org.apache.ftpserver.usermanager.impl.BaseUser;
import org.apache.ftpserver.usermanager.impl.WritePermission;
import org.jboss.ejb3.annotation.Service;
/**
* Session Bean implementation class FtpServerServiceLocal
*/
@Service
@Local(FtpServerServiceLocal.class)
public class FtpServerService implements FtpServerServiceLocal
{
private FtpServer server = null;
@Override
public void create() throws Exception
{
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory factory = new ListenerFactory();
// set the port of the listener
factory.setPort(2221);
// replace the default listener
serverFactory.addListener("default", factory.createListener());
// create new user
serverFactory.setUserManager(addUser("jboss", "azerty", "c:/tools"));
// start the server
server = serverFactory.createServer();
}
@Override
public void start() throws Exception
{
try {
server.start();
} catch (FtpException e) {
e.printStackTrace();
}
}
public void restart() throws Exception
{
try {
server.stop();
server.start();
} catch (FtpException e) {
e.printStackTrace();
}
}
@Override
public void stop()
{
try {
server.stop();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void destroy() {
stop();
server = null;
}
public UserManager addUser(final String username, final String password, final String ftproot)
{
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File("c:/jbossusers.properties"));
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
UserManager um = userManagerFactory.createUserManager();
BaseUser user = new BaseUser();
user.setName(username);
user.setPassword(password);
user.setHomeDirectory(ftproot);
List<Authority> authorities = new ArrayList<Authority>();
authorities.add(new WritePermission());
user.setAuthorities(authorities);
try {
um.save(user);
} catch (FtpException e) {
e.printStackTrace();
}
return um;
}
}
그리고 간단한 클라이언트 :
package client;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.Properties;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import com.cs3Drender.session.RenderSessionRemote;
public class Client
{
public static void main(String[] args) {
/* get a initial context. By default the settings in the file
* jndi.properties are used.
* You can explicitly set up properties instead of using the file.
*/
Properties properties = new Properties();
properties.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
properties.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
properties.put("java.naming.provider.url","localhost");
try
{
InitialContext context= new InitialContext(properties);
RenderSessionRemote beanRemote=(RenderSessionRemote)context.lookup("RenderSession/remote");
//System.out.println(beanRemote.render("test"));
try {
FTPClient ftp = new FTPClient();
ftp.connect("localhost", 2221);
ftp.login("jboss", "azerty");
//ftp.enterLocalPassiveMode();
//ftp.enterRemotePassiveMode();
ftp.setAutodetectUTF8(true);
String filename = "bug sheep 2.png";
ftp.storeFile(filename, new FileInputStream("c:/"+filename));
ftp.logout();
ftp.disconnect();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}catch(NamingException e){
e.printStackTrace();
}
}
}
내가 응용 프로그램 여기
필요는 EJB 서비스 빈의 FTPServer를 시작 포함 된 방법을 사용하면 내가 사용하는 코드입니다
전송 데이터 크기가 잘못된 이유를 정확히 알지 못합니다.
또한 서버의 추적 로그에는 오류가 없습니다.
11 : 52 : 28,548 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter] CREATED 11 : 52 : 28,549 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter] 열림 11시 52분 : 28,550 정보 [org.apache.ftpserver.listener.nio.FtpLoggingFilter] SENT : 220 새로운 사용자를위한 서비스 준비.
11 : 52 : 28,552 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter]받은 : USER 보스 11 : 52 : 28,553 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter] 보내 331 사용자 이름은 알았습니다. jboss 비밀번호가 필요합니다.
11 : 52 : 28,553 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter]받은 : PASS * 11 : 52 : 28,561 INFO [org.apache.ftpserver.command.impl.PASS] 로그인 성공 - jboss 11 : 52 : 28,561 정보 [org.apache.ftpserver.listener.nio.FtpLoggingFilter] 보낸 사람 : 230 로그인 한 사용자가 계속 진행합니다.
11 : 52 : 28,562 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter]받은 : PORT 127,00112190 11 : 52 : 28,563 INFO [org.apache.ftpserver.listener .nio.FtpLoggingFilter] 보낸 : 200 명령 포트 괜찮아.
11 : 52 : 28,563 INFO [org.apache.ftpserver.listener.nio.FtpLoggingFilter]받은 : STOR 버그 양 2.png 11 : 52 : 28,705 INFO [org.apache.ftpserver.command.impl.STOR ] 파일 업로드/버프 양 2.png 11 : 52 : 28,706 정보 [org.apache.ftpserver.listener.nio.FtpLoggingFilter] 보낸 사람 : 150 파일 상태 확인. 약 데이터 연결을 엽니 다.
11 : 52 : 28,706 정보 [org.apache.ftpserver.listener.nio.FtpLoggingFilter] SENT : 226 전송이 완료되었습니다.
도움 주셔서 감사합니다.