2013-07-03 3 views
7

Мне просто интересно, есть ли простой способ Я могу загрузить небольшой файл на ftp-сервер. Я проверил библиотеку Apache Commons Net, но это кажется довольно сложным, если честно. Есть ли более простой способ загрузить небольшой файл в ftp?Загрузка на FTP с использованием Java

Закончено с использованием библиотеки Apache Commons Net Library, было не слишком сложно.

ответ

2

Использование Apache Commons Lib имеет эту утилиту org.apache.commons.net.ftp.FTPClient:

http://commons.apache.org/

import org.apache.commons.net.ftp.FTPClient; 
FTPClient client = new FTPClient(); 
String sFTP = "ftp.miservidor.com"; 
String sUser = "usuario"; 
String sPassword = "password"; 

try { 
    client.connect(sFTP); 
    boolean login = client.login(sUser,sPassword); 
} catch (IOException ioe) {} 

Полный пример: http://www.google.es/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CD8QFjAB&url=http%3A%2F%2Fcommons.apache.org%2Fproper%2Fcommons-net%2Fexamples%2Fftp%2FFTPClientExample.java&ei=JGLUUdsrotHsBtj9gNgI&usg=AFQjCNHymPhHZOKh2S4yuLMTYHTVTnQ02g&sig2=8kJSz_Gl-vsPECe8sIxLGA&bvm=bv.48705608,d.ZGU&cad=rja

+2

И как бы я загрузить файл после входа в систему ? – user2526311

18

С этой ссылке: Upload files to FTP server using URLConnection class. Никакой внешней библиотеки не требуется.

String ftpUrl = "ftp://%s:%[email protected]%s/%s;type=i"; 
String host = "www.myserver.com"; 
String user = "tom"; 
String pass = "secret"; 
String filePath = "E:/Work/Project.zip"; 
String uploadPath = "/MyProjects/archive/Project.zip"; 

ftpUrl = String.format(ftpUrl, user, pass, host, uploadPath); 
System.out.println("Upload URL: " + ftpUrl); 

try { 
    URL url = new URL(ftpUrl); 
    URLConnection conn = url.openConnection(); 
    OutputStream outputStream = conn.getOutputStream(); 
    FileInputStream inputStream = new FileInputStream(filePath); 

    byte[] buffer = new byte[BUFFER_SIZE]; 
    int bytesRead = -1; 
    while ((bytesRead = inputStream.read(buffer)) != -1) { 
     outputStream.write(buffer, 0, bytesRead); 
    } 

    inputStream.close(); 
    outputStream.close(); 

    System.out.println("File uploaded"); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} 
+3

Это очень хорошо - просто небольшая коррекция - пользователь и пароль должны быть закодированы с помощью функции URLEncoder.encode –

1

Я думаю, я нашел довольно хороший пример использования org.apache.commons.net.ftp.FTPClienthere

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 

import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 

/** 
* A program that demonstrates how to upload files from local computer 
* to a remote FTP server using Apache Commons Net API. 
* @author www.codejava.net 
*/ 
public class FTPUploadFileDemo { 

    public static void main(String[] args) { 
     String server = "www.myserver.com"; 
     int port = 21; 
     String user = "user"; 
     String pass = "pass"; 

     FTPClient ftpClient = new FTPClient(); 
     try { 

      ftpClient.connect(server, port); 
      ftpClient.login(user, pass); 
      ftpClient.enterLocalPassiveMode(); 

      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 

      // APPROACH #1: uploads first file using an InputStream 
      File firstLocalFile = new File("D:/Test/Projects.zip"); 

      String firstRemoteFile = "Projects.zip"; 
      InputStream inputStream = new FileInputStream(firstLocalFile); 

      System.out.println("Start uploading first file"); 
      boolean done = ftpClient.storeFile(firstRemoteFile, inputStream); 
      inputStream.close(); 
      if (done) { 
       System.out.println("The first file is uploaded successfully."); 
      } 

      // APPROACH #2: uploads second file using an OutputStream 
      File secondLocalFile = new File("E:/Test/Report.doc"); 
      String secondRemoteFile = "test/Report.doc"; 
      inputStream = new FileInputStream(secondLocalFile); 

      System.out.println("Start uploading second file"); 
      OutputStream outputStream = ftpClient.storeFileStream(secondRemoteFile); 
      byte[] bytesIn = new byte[4096]; 
      int read = 0; 

      while ((read = inputStream.read(bytesIn)) != -1) { 
       outputStream.write(bytesIn, 0, read); 
      } 
      inputStream.close(); 
      outputStream.close(); 

      boolean completed = ftpClient.completePendingCommand(); 
      if (completed) { 
       System.out.println("The second file is uploaded successfully."); 
      } 

     } catch (IOException ex) { 
      System.out.println("Error: " + ex.getMessage()); 
      ex.printStackTrace(); 
     } finally { 
      try { 
       if (ftpClient.isConnected()) { 
        ftpClient.logout(); 
        ftpClient.disconnect(); 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 

}