2014-06-24 22 views
5

La mia applicazione sta caricando il file dalla scheda SD nella directory su FileZilla FTP Server. Dopo aver eseguito la mia app, mi dà un'eccezione che non riesco a risolvere dopo tante ricerche.Caricamento file da scheda SD a FileZilla Server

Ecco l'output del log gatto:

06-24 11:06:53.715: W/System.err(1304): java.io.IOException: SimpleFTP received an unknown response when connecting to the FTP server: 220-FileZilla Server version 0.9.41 beta 
06-24 11:06:54.055: W/System.err(1304):  at org.jibble.simpleftp.SimpleFTP.connect(SimpleFTP.java:74) 
06-24 11:06:54.087: W/System.err(1304):  at com.example.upload1.MainActivity$UploadVideo.doInBackground(MainActivity.java:63) 
06-24 11:06:54.167: W/System.err(1304):  at com.example.upload1.MainActivity$UploadVideo.doInBackground(MainActivity.java:1) 
06-24 11:06:54.167: W/System.err(1304):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
06-24 11:06:54.167: W/System.err(1304):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
06-24 11:06:54.167: W/System.err(1304):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
06-24 11:06:54.167: W/System.err(1304):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
06-24 11:06:54.167: W/System.err(1304):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
06-24 11:06:54.403: W/System.err(1304):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
06-24 11:06:54.403: W/System.err(1304):  at java.lang.Thread.run(Thread.java:856) 

e questo è il mio codice per il MainActivity.java

import java.io.File; 

    import org.jibble.simpleftp.SimpleFTP; 

    import android.app.Activity; 
    import android.os.AsyncTask; 
    import android.os.Bundle; 
    import android.os.Environment; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 
    import android.widget.Toast; 
    //import com.kpbird.ftpdemo.R; 




    public class MainActivity extends Activity implements OnClickListener { 
     //FTPClient client; 


    /********* work only for Dedicated IP ***********/ 
    static final String FTP_HOST= "203.199.134.131"; 

    /********* FTP USERNAME ***********/ 
    static final String FTP_USER = "a_gupta"; 

    /********* FTP PASSWORD ***********/ 
    static final String FTP_PASS ="AditI123"; 

    Button btn; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn = (Button) findViewById(R.id.button1); 
     btn.setOnClickListener(this); 
    } 
    public void onClick(View v) { 
     UploadFile async = new UploadFile(); 
     async.execute(); 

     } 

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

     @Override 
     protected String doInBackground(String... params) { 
     // ftpClient=uploadingFilestoFtp(); 
     try { 
     SimpleFTP ftp = new SimpleFTP(); 

     ftp.connect(FTP_HOST, 21, FTP_USER, FTP_PASS); 

     ftp.bin(); 

     // Change to a new working directory on the FTP server. 
     ftp.cwd("callrecording"); 

     // Upload some files. 
     ftp.stor(new File(Environment.getExternalStorageDirectory().getParent() + "/invite_json.txt")); 
     // ftp.stor(new File("comicbot-latest.png")); 

     // You can also upload from an InputStream, e.g. 
     // ftp.stor(new FileInputStream(new File("test.png")), 
     // "test.png"); 
     // ftp.stor(someSocket.getInputStream(), "blah.dat"); 

     // Quit from the FTP server. 
     ftp.disconnect(); 

     } catch (Exception e) { 
     e.printStackTrace(); 
     } 

     return null; 
     } 

     @Override 
     protected void onPreExecute() { 
     super.onPreExecute(); 
     // dialog.show(); 
     } 

     @Override 
     protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     Toast.makeText(MainActivity.this, "sent", Toast.LENGTH_LONG).show(); 
     } 
     } 
+0

ho provato a connettermi con le credenziali di cui sopra ... non si connette ... – KOTIOS

+0

'Dopo aver eseguito la mia appliaction'? Intendi: 'mentre esegui il mio AsyncTask'? FTPClient non riesce a connettersi non è chiaro. La lamentela riguarda la risposta. E una risposta può essere presente solo dopo la connessione ... Cosa intendi con 'funziona solo per IP dedicato '? Il server accetta solo gli IP del client fidato? Quali linee del tuo codice vengono eseguite? Aggiungi log.d() per scoprirlo. – greenapps

+0

Il codice di cui sopra funziona per IP dedicato significa che è necessario definire l'IP in FTP_HOST, un IP alla volta. E dopo aver eseguito la mia app significa che dopo l'evento click sul pulsante sto ottenendo l'eccezione – Adi

risposta

0

Sembra che l'attuazione libreria SimpleFtp non è conforme alla specifica FTP (RFC 959). Secondo la fonte trovata here, si aspetta che la risposta iniziale del server FTP inizi con "220 " mentre la RFC specifica che la risposta FTP [an] è composta da un numero di tre cifre (trasmesso come tre caratteri alfanumerici) seguito da un testo. Quindi è consentita una risposta a partire da "220-".

Suggerisco di utilizzare una libreria FTP migliore come apache commons ftp o ftp4j.

+0

Grazie per il tuo commento, ma ho già provato it.Per favore mi suggerisce qualcosa di nuovo. – Adi

+0

Hai provato cosa esattamente? –

+0

Ho provato entrambe le librerie ma con entrambe le librerie la connessione non sta accadendo affatto. E non sono sicuro, ma potrebbe essere il problema è che c'è una differenza durante la connessione al server FTP e FileZilla Server. Quindi, ho provato a cambiare la porta n. a 425 (supportato da filezilla per i trasferimenti.) e ora sto ottenendo errore ConnectException – Adi

1

Dopo tanti giorni ho lavorato di nuovo su questa cosa e ho avuto successo. Quindi, sto postando la mia risposta. Spero che possa aiutare qualcuno.

Questo è il mio principale Codice attività:

package com.example.ftpup; 

import it.sauronsoftware.ftp4j.FTPAbortedException; 
import it.sauronsoftware.ftp4j.FTPClient; 
import it.sauronsoftware.ftp4j.FTPDataTransferException; 
import it.sauronsoftware.ftp4j.FTPDataTransferListener; 
import it.sauronsoftware.ftp4j.FTPException; 
import it.sauronsoftware.ftp4j.FTPIllegalReplyException; 

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

import android.app.Activity; 
import android.app.Dialog; 
import android.app.ProgressDialog; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.os.Environment; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 

public class MainActivity extends Activity implements OnClickListener { 


    /********* work only for Dedicated IP ***********/ 
    static final String FTP_HOST= "203.199.134.131"; 

    /********* FTP USERNAME ***********/ 
    static final String FTP_USER = "a_gupta"; 

    /********* FTP PASSWORD ***********/ 
    static final String FTP_PASS ="AditI123"; 
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
    Button btn; 
    FTPClient client = new FTPClient(); 
    private ProgressDialog mProgressDialog; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btn = (Button) findViewById(R.id.uploadButton); 
     btn.setOnClickListener(this); 

    } 

    public void onClick(View v) { 


     startDownload(); 
    } 
    // /******* Used to file upload and show progress **********/ 




     private void startDownload() { 
      //Pick file 
      //File f = new File("/sdcard/invite_json.txt"); 
      // Async task 

      new DownloadFileAsync().execute(); 
     } 
     @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_DOWNLOAD_PROGRESS: 
       mProgressDialog = new ProgressDialog(this); 
       mProgressDialog.setMessage("Downloading file.."); 
       mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
       mProgressDialog.setCancelable(false); 
       mProgressDialog.show(); 
       return mProgressDialog; 
      default: 
       return null; 
      } 
     } 
     // Upload sdcard file 


    //public void uploadFile(File fileName){ 

    class DownloadFileAsync extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      showDialog(DIALOG_DOWNLOAD_PROGRESS); 


     }@Override 
     protected String doInBackground(String... filename) { 
      String sdcard = Environment.getExternalStorageDirectory().toString(); 
      File file = new File(sdcard+"/androrec/"); 
      //File file2 = new File("/mnt/sdcard/CallRecorderBackup"); 

      File[] listofFiles = file.listFiles(); 
      Log.d("No. of files" ,fileArrayToString(listofFiles)); 
      try{ 
       client.connect(FTP_HOST,21); 



      for (int i = 0; i <=listofFiles.length ; i++) { 


        Log.d("Tag 4", "inside of ftp connect"); 

       Log.d("Tag 1", "inside of for loop"); 

       if (listofFiles == null || listofFiles[i].isFile()) { 
        Log.d("Tag 2", "inside of if"); 
        String files = listofFiles[i].getName(); 
        Log.d("Tag 3", "inside of files"); 

        File filetoload = new File(sdcard+"/androrec/"+files); 
        String uploadingFiles = filetoload.toString(); 
        Log.d("Files uploading to the server", uploadingFiles); 
        client.login(FTP_USER, FTP_PASS); 
          //client.connect(FTP_HOST,21); 
          Log.d("Tag 4", "inside of ftp connect"); 

         Log.d("Tag 5", "inside of for ftp pass"); 
         //client.setType(FTPClient.TYPE_BINARY); 
         //client.changeDirectory("/"); 
         Log.d("Tag 6", "inside of for dir"); 

        client.upload(filetoload); 
        Log.d("Tag 7", "inside of download"); 
        //out.write(buf, 0, len); 
       //} 
       //} 






      // client.upload(in, new MyTransferListener()); 

     } 
       else{ 

       } 
       //client.disconnect(true); 
       } 
      } 

       catch (IllegalStateException | IOException 
         | FTPIllegalReplyException | FTPException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (FTPDataTransferException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } catch (FTPAbortedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 


      try { 
       client.disconnect(true); 
      } catch (Exception e2) { 
       e2.printStackTrace(); 
      } 
      return null; 
      } 



      /*} 
      }*/ 

     @Override 
     protected void onPostExecute(String unused) { 
      dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
     } 

    } 

    // } 
    String fileArrayToString(File[] f){ 
     String output = ""; 
     String delimiter = "\n" ;// Can be new line \n tab \t etc... 
     for (int i=0; i<f.length; i++) 
     { 
      output = output + f[i].getPath() + delimiter; 
     } 

     return output; 
    } 

} 

Si prega di verificare il gatto registro mentre l'applicazione è in esecuzione si arriva a sapere come questo funziona. Grazie.