2014-04-22 2 views
5

익명 FTP를 통해 클라이언트에서 서버로 파일을 보낼 수있는 FTP 클라이언트 및 서버를 작성하려고합니다. 그러나 나는 계속 550 Permission Denied을 얻는다. 서버에서 파일을 다운로드하거나 디렉토리의 파일 목록을 가져 오는 등의 작업을 수행 할 수 있지만 다운로드를 시도 할 때마다 550 Permission Denied이라고 표시됩니다. 로그인 여부에 관계없이 익명 FTP를 사용하면 결과가 동일합니다.FTP 클라이언트가 서버별로 업로드 권한을 계속 거부합니다.

내 코드에는 아무런 문제가 나타나지 않지만 같은 결과로 다른 네트워크와 컴퓨터에서 실행 해 보았습니다. 내가 볼 수없는 코드에 문제가 있습니까? 아니면 라우터/방화벽으로 무언가해야합니까?

Java와 실행중인 Windows에서 클라이언트와 서버를 모두 작성하고 있습니다. 내가 사용하는 라이브러리는 Apache Commons FTP ClientApache FTP Server입니다.

여기에 클라이언트가 있습니다. 주석 처리 된 코드는 디렉토리의 파일 목록을 업로드하고 가져 오는 것입니다.

import org.apache.commons.net.ftp.*; 
import java.io.*; 
import java.net.*; 

public class Client 
{ 
    public Client() 
    { 
     // Do nothing 
    } 

    public void transferFile(String ipAddress) 
    { 
     // For uploading 
     FileInputStream file = null; 
     // For downloading 
     // FileOutputStream file = null; 

     try 
     { 
      InetAddress address = InetAddress.getByName(ipAddress); 

      FTPClient ftpClient = new FTPClient(); 
      ftpClient.connect(address, 5000); 
      ftpClient.login("anonymous", ""); 
      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
      ftpClient.enterLocalPassiveMode(); 

      // For uploading 
      file = new FileInputStream(new File("C:/SoundFiles/Send/Test1.txt")); 
      // For downloading 
      // file = new FileOutputStream(new File("C:/SoundFiles/Receive/Test2.txt")); 

      // For uploading 
      boolean success = ftpClient.storeFile("/Receive/Test2.txt", file); 
      // For downloading 
      // boolean success = ftpClient.retrieveFile("/Send/Test1.txt", file); 

      // For listing the files on the server's directory 
      /* 
      FTPFile[] directoryFiles = ftpClient.listFiles(); 
      System.out.println("There are " + directoryFiles.length + " files"); 
      for(int i = 0; i < directoryFiles.length; i++) 
      { 
       System.out.println(i + ": " + directoryFiles[i].getName()); 
      } 
      */ 

      if(success) 
       System.out.println("Success."); 
      else 
       System.out.println("Fail."); 

      ftpClient.logout(); 
      ftpClient.disconnect(); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if(file != null) 
        file.close(); 
      } 
      catch(IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 

    public static void main(String[] args) 
    { 
     Client client = new Client(); 
     client.transferFile("Enter your IP address here"); 
    } 
} 

여기에 서버가 있습니다.

import org.apache.ftpserver.FtpServer; 
import org.apache.ftpserver.FtpServerFactory; 
import org.apache.ftpserver.ConnectionConfigFactory; 
import org.apache.ftpserver.usermanager.impl.BaseUser; 
import org.apache.ftpserver.listener.ListenerFactory; 
import org.apache.ftpserver.ftplet.FtpException; 
import org.apache.ftpserver.ftplet.UserManager; 

public class Server 
{ 
    public Server() 
    { 
     // Do nothing 
    } 

    public void startServer() 
    { 
     FtpServer server = null; 

     try 
     { 
      FtpServerFactory ftpServerFactory = new FtpServerFactory(); 

      ListenerFactory listenerFactory = new ListenerFactory(); 
      listenerFactory.setPort(5000); 
      ftpServerFactory.addListener("default", listenerFactory.createListener()); 

      ConnectionConfigFactory configFactory = new ConnectionConfigFactory(); 
      configFactory.setAnonymousLoginEnabled(true); 
      ftpServerFactory.setConnectionConfig(configFactory.createConnectionConfig()); 

      BaseUser user = new BaseUser(); 
      user.setName("anonymous"); 
      user.setPassword(""); 
      user.setHomeDirectory("C:/SoundFiles"); 
      UserManager userManager = ftpServerFactory.getUserManager(); 
      userManager.save(user); 

      server = ftpServerFactory.createServer(); 
      server.start(); 
     } 
     catch (FtpException e) 
     { 
      e.printStackTrace(); 
     } 

     // Stop the server after 10 seconds 
     try 
     { 
      Thread.sleep(10000); 
     } 
     catch(InterruptedException e) 
     { 
      e.printStackTrace(); 
     } 

     if(server != null) 
      server.stop(); 
    } 

    public static void main(String[] args) 
    { 
     Server server = new Server(); 
     server.startServer(); 
    } 
} 

이것은 서버에서 계속 출력됩니다.

[main] INFO org.apache.ftpserver.impl.DefaultFtpServer - FTP server started 
[NioProcessor-3] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CREATED 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - OPENED 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 220 Service ready for new user. 

[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: USER anonymous 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 331 Guest login okay, send your complete e-mail address as password. 

[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: PASS 
[pool-3-thread-1] INFO org.apache.ftpserver.command.impl.PASS - Anonymous login success - null 
[pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 230 User logged in, proceed. 

[pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: TYPE I 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 200 Command TYPE okay. 

[pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: PASV 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 227 Entering Passive Mode 

[pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: STOR /Receive/Test2.txt 
[pool-3-thread-2] WARN org.apache.ftpserver.impl.PassivePorts - Releasing unreserved passive port: 2133 
[pool-3-thread-2] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 550 /Receive/Test2.txt: Permission denied. 

[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - RECEIVED: QUIT 
[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - SENT: 221 Goodbye. 

[pool-3-thread-1] INFO org.apache.ftpserver.listener.nio.FtpLoggingFilter - CLOSED 

내가 어떻게 작동하도록 할 수 있는지 제안 해 주시면 감사하겠습니다.

+0

FTP 서버가'/ Receive' 디렉토리에 쓸 수 있습니까? –

답변

8

실종 된 부분을 찾아 냈습니다. Server 클래스에 다음 코드 행을 추가해야했습니다.

List<Authority> authorities = new ArrayList<Authority>(); 
authorities.add(new WritePermission()); 
user.setAuthorities(authorities);