2012-07-22 14 views
6

Di seguito è riportato il codice che è necessario creare un documento di testo e caricarlo sul mio server FTP. Per qualche ragione non sembra funzionare. Ho usato per le librerie fornite aCaricamento di un file su un server FTP dal telefono Android?

http://lavalatwork.blogspot.tw/2010/09/using-apache-commons-ftp-library-in.html

per comunicare con il server FTP.

try 
    { 
     final String testString = new String("Hello"); 
     FileOutputStream fOut = openFileOutput("samplefile.txt", 
       MODE_WORLD_READABLE); 
     OutputStreamWriter osw = new OutputStreamWriter(fOut); 

     osw.write(testString); 
     osw.flush(); 
     osw.close(); 
    } 


    catch(IOException ex) 
    { 

    } 


    FTPClient mFTP = new FTPClient(); 
    try { 
     // Connect to FTP Server 
     mFTP.connect("192.168.10.101"); 
     //mFTP.login("user", "password"); 
     mFTP.setFileType(FTP.BINARY_FILE_TYPE); 
     mFTP.enterLocalPassiveMode(); 

     // Prepare file to be uploaded to FTP Server 
     File file = new File(getFileStreamPath("samplefile.txt")+ ""); 
     FileInputStream ifile = new FileInputStream(file); 

     // Upload file to FTP Server 
     mFTP.storeFile("filetotranfer",ifile); 
     mFTP.disconnect();   
    } catch (SocketException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Qualsiasi aiuto sarebbe apprezzato.

+0

Controllo l'uscita di logcat è spesso molto utile quando si utilizza il client FTP Apache Commons. –

+1

Si prega di essere espliciti su cosa esattamente non funziona. E pubblica il tuo logcat. –

risposta

15

Vedere questo ... Questo vi aiuterà a correggere i problemi nel codice.

Ho usato il del Apache Commons libreria per caricare e scaricare un file audio da e verso il server ... vedere questo ...

Caricamento:

public void goforIt(){ 


     FTPClient con = null; 

     try 
     { 
      con = new FTPClient(); 
      con.connect("192.168.2.57"); 

      if (con.login("Administrator", "KUjWbk")) 
      { 
       con.enterLocalPassiveMode(); // important! 
       con.setFileType(FTP.BINARY_FILE_TYPE); 
       String data = "/sdcard/vivekm4a.m4a"; 

       FileInputStream in = new FileInputStream(new File(data)); 
       boolean result = con.storeFile("/vivekm4a.m4a", in); 
       in.close(); 
       if (result) Log.v("upload result", "succeeded"); 
       con.logout(); 
       con.disconnect(); 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 






    } 

download :

public void goforIt(){ 
    FTPClient con = null; 

    try 
    { 
     con = new FTPClient(); 
     con.connect("192.168.2.57"); 

     if (con.login("Administrator", "KUjWbk")) 
     { 
      con.enterLocalPassiveMode(); // important! 
      con.setFileType(FTP.BINARY_FILE_TYPE); 
      String data = "/sdcard/vivekm4a.m4a"; 

      OutputStream out = new FileOutputStream(new File(data)); 
      boolean result = con.retrieveFile("vivekm4a.m4a", out); 
      out.close(); 
      if (result) Log.v("download result", "succeeded"); 
      con.logout(); 
      con.disconnect(); 
     } 
    } 
    catch (Exception e) 
    { 
     Log.v("download result","failed"); 
     e.printStackTrace(); 
    } 



} 
3

È possibile utilizzare Simple Java FTP Client e aggiungerlo come vaso esterno per il progetto, si può anche fare riferimento a questo link

public class FileUpload 
{ 

    /** 
    * Upload a file to a FTP server. A FTP URL is generated with the 
    * following syntax: 
    * ftp://user:[email protected]:port/filePath;type=i. 
    * 
    * @param ftpServer , FTP server address (optional port ':portNumber'). 
    * @param user , Optional user name to login. 
    * @param password , Optional password for user. 
    * @param fileName , Destination file name on FTP server (with optional 
    *   preceding relative path, e.g. "myDir/myFile.txt"). 
    * @param source , Source file to upload. 
    * @throws MalformedURLException, IOException on error. 
    */ 
    public void upload(String ftpServer, String user, String password, 
     String fileName, File source) throws MalformedURLException, 
     IOException 
    { 
     if (ftpServer != null && fileName != null && source != null) 
     { 
     StringBuffer sb = new StringBuffer("ftp://"); 
     // check for authentication else assume its anonymous access. 
     if (user != null && password != null) 
     { 
      sb.append(user); 
      sb.append(':'); 
      sb.append(password); 
      sb.append('@'); 
     } 
     sb.append(ftpServer); 
     sb.append('/'); 
     sb.append(fileName); 
     /* 
      * type ==> a=ASCII mode, i=image (binary) mode, d= file directory 
      * listing 
      */ 
     sb.append(";type=i"); 

     BufferedInputStream bis = null; 
     BufferedOutputStream bos = null; 
     try 
     { 
      URL url = new URL(sb.toString()); 
      URLConnection urlc = url.openConnection(); 

      bos = new BufferedOutputStream(urlc.getOutputStream()); 
      bis = new BufferedInputStream(new FileInputStream(source)); 

      int i; 
      // read byte by byte until end of stream 
      while ((i = bis.read()) != -1) 
      { 
       bos.write(i); 
      } 
     } 
     finally 
     { 
      if (bis != null) 
       try 
       { 
        bis.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
      if (bos != null) 
       try 
       { 
        bos.close(); 
       } 
       catch (IOException ioe) 
       { 
        ioe.printStackTrace(); 
       } 
     } 
     } 
     else 
     { 
     System.out.println("Input not available."); 
     } 
    } 

È inoltre possibile utilizzare la libreria Apache commons-net-ftp, per maggiori dettagli è possibile concentrarsi su questo link.

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

FTPClient ftpClient = new FTPClient(); 

try { 
    ftpClient.connect(InetAddress.getByName(SERVER)); 
    ftpClient.login(USERNAME, PASSWORD); 
    ftpClient.changeWorkingDirectory(PATH); 

    if (ftpClient.getReplyString().contains("250")) { 
     ftpClient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE); 
     BufferedInputStream buffIn = null; 
     buffIn = new BufferedInputStream(new FileInputStream(FULL_PATH_TO_LOCAL_FILE)); 
     ftpClient.enterLocalPassiveMode(); 
     ProgressInputStream progressInput = new ProgressInputStream(buffIn, progressHandler); 

     boolean result = ftpClient.storeFile(localAsset.getFileName(), progressInput); 
     buffIn.close(); 
     ftpClient.logout(); 
     ftpClient.disconnect(); 
    } 

} catch (SocketException e) { 
    Log.e(SorensonApplication.TAG, e.getStackTrace().toString()); 
} catch (UnknownHostException e) { 
    Log.e(SorensonApplication.TAG, e.getStackTrace().toString()); 
} catch (IOException e) { 
    Log.e(SorensonApplication.TAG, e.getStackTrace().toString()); 
} 
0

Ecco il blocco di codice:

private class UploadFile extends AsyncTask<String, Integer, Boolean> { 

    @Override 
    protected Boolean doInBackground(String... params) { 
     FTPClient client = new FTPClient(); 
     try { 
      client.connect(params[1], PORT); 
      client.login(params[2], params[3]); 
      client.setFileType(FTP.BINARY_FILE_TYPE, FTP.BINARY_FILE_TYPE); 
      return client.storeFile(filename, new FileInputStream(new File(
        params[0]))); 

     } catch (Exception e) { 
      Log.d("FTP", e.toString()); 
      return false; 
     } 
    } 

    @Override 
    protected void onPostExecute(Boolean sucess) { 
     if (sucess) 
      Toast.makeText(activity, "File Sent", Toast.LENGTH_LONG).show(); 
     else 
      Toast.makeText(activity, "Error", Toast.LENGTH_LONG).show(); 
    } 

} 

Si prega di ottenere progetti di lavoro completo per il caricamento di file da server FTP dal basso unità.

File upload su FTP viene utilizzata la porta 21, parametro richiesto per caricare file sul FTP ..

nome host nome utente la password

https://drive.google.com/file/d/0B80LBJs3JkaDYUNfZ3pDSkVJUDA/edit

+0

Grazie @FelixSFD Ho modificato la mia risposta in questo. Adesso va bene? – Krrish

Problemi correlati