2014-04-22 12 views
5

द्वारा अपलोड करने की अनुमति अस्वीकार कर रही है, मैं एक एफ़टीपी क्लाइंट और सर्वर लिखने की कोशिश कर रहा हूं जो मुझे अज्ञात एफ़टीपी के माध्यम से क्लाइंट से सर्वर पर फ़ाइल भेजने की अनुमति देगा। हालांकि, मुझे 550 Permission Denied मिल रहा है। मैं सर्वर से फ़ाइल डाउनलोड करने जैसी अन्य चीजों को करने में सक्षम हूं, या निर्देशिका में फ़ाइलों की एक सूची प्राप्त करता हूं, लेकिन जब भी मैं डाउनलोड करने का प्रयास करता हूं तो यह 550 Permission Denied कहता है। परिणाम वही है जो मैं लॉग इन करता हूं या अज्ञात एफ़टीपी का उपयोग करता हूं।एफ़टीपी क्लाइंट को सर्वर

मुझे अपने कोड के साथ कोई समस्या नहीं दिख रही है, लेकिन मैंने इसे उसी नेटवर्क के साथ विभिन्न नेटवर्क और कंप्यूटर पर चलाने का प्रयास किया है। क्या कोड में कोई समस्या है जो मैं नहीं देखता, या मुझे राउटर/फ़ायरवॉल के साथ कुछ करना है?

मैं जावा में क्लाइंट और सर्वर दोनों लिख रहा हूं और विंडोज चल रहा हूं। मैं उपयोग कर रहे पुस्तकालय Apache Commons FTP Client और Apache 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

क्या एफ़टीपी सर्वर द्वारा '/ प्राप्त करें 'निर्देशिका लिखने योग्य है? –

उत्तर

8

मुझे पता चला कि क्या गुम था। मुझे बस सर्वर वर्ग में कोड की निम्न पंक्तियां जोड़ने की आवश्यकता है।

List<Authority> authorities = new ArrayList<Authority>(); 
authorities.add(new WritePermission()); 
user.setAuthorities(authorities); 
संबंधित मुद्दे