2013-07-03 19 views
7

Mi stavo chiedendo se ci fosse un semplice in modo che potessi caricare un piccolo file su un server ftp. Ho controllato la libreria Apache Commons Net ma sembra abbastanza complicato per essere onesto. C'è un modo più semplice per caricare un piccolo file su ftp?Caricamento su FTP tramite Java

Terminato utilizzando Apache Commons Net Library, non era troppo difficile.

risposta

2

Usa Apache Commons lib ha questa utility 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) {} 

esempio completa: 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

E come vorrei caricare il file dopo il login ? – user2526311

18

Da questo link: Upload files to FTP server using URLConnection class. Nessuna libreria esterna necessaria.

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

Questo è molto buono - solo una piccola correzione - utente e pass devono essere codificati con la funzione URLEncoder.encode –

1

penso, ho trovato un bel bel campione di utilizzare 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(); 
      } 
     } 
    } 

}