Seguimiento de FTP subir datos en android?

Tengo un sistema de trabajo del ftp con androide, pero quiero poder seguir los bytes mientras que suben, así que puedo poner al día una barra de progreso mientras que la subida progresa. ¿Es esto posible con Android? Ahora mismo, estoy usando org.apache.common.net.ftp y el código que estoy usando está abajo. También, estoy funcionando esto en un AsyncTask.

 package com.dronnoc.ftp.complex; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.io.CopyStreamEvent; import org.apache.commons.net.io.CopyStreamListener; import org.apache.commons.net.io.Util; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.view.Window; public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); setContentView(R.layout.main); String text = "BIGFILE"; //Big file here InputStream data = new ByteArrayInputStream(text.getBytes()); new ComplexFTPTransfer().execute(data); } private class ComplexFTPTransfer extends AsyncTask<InputStream, Long[], Void> { private FTPClient ftp = null; @Override protected void onPreExecute() { super.onPreExecute(); try { ftp = new FTPClient(); ftp.connect("hostname"); } catch (SocketException e) { this.cancel(true); } catch (IOException e) { this.cancel(true); } Main.this.setProgressBarIndeterminateVisibility(true); } @Override protected Void doInBackground(InputStream... params) { if(!this.isCancelled()) { try { if(ftp.login("user", "pass")) { ftp.enterLocalPassiveMode(); InputStream item = params[0]; int streamSize = 0; while(item.read() != -1) { streamSize++; } InputStream is = new BufferedInputStream(params[0], streamSize); OutputStream os = ftp.storeFileStream("/test.txt"); Util.copyStream(is, os, streamSize, streamSize, new CopyStreamListener() { @Override public void bytesTransferred(long totalBytesTransferred, int bytesTransferred, long streamSize) { publishProgress(new Long[] {totalBytesTransferred, streamSize}); } @Override public void bytesTransferred(CopyStreamEvent event) { } }); ftp.completePendingCommand(); } ftp.logout(); ftp.disconnect(); } catch (IOException e) { } catch (Exception e) { } } return null; } @Override protected void onProgressUpdate(Long[]... values) { super.onProgressUpdate(values); Log.d("UPDATE", values[0] + " of " + values[1] + " copied."); //TODO Put code here } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); Main.this.setProgressBarIndeterminateVisibility(false); } } } 

Lo que quiero saber es si puedo ejecutar una barra de progreso, la actualización de cada pocos bytes subidos? Aclamaciones

Esta pregunta tiene una implementación de un InputStream que incluye una devolución de llamada de progreso. Utilice ese InputStream y llame a publishProgress desde esa devolución de llamada para actualizaciones incrementales durante la carga del archivo.

Descargar este archivo .jar

httpmime-4.1.1.jar y commons-net.jar

  try { FTPClient ftpClient = new FTPClient(); ftpClient.connect(InetAddress .getByName(Your host Url)); ftpClient.login(loginName, password); System.out.println("status :: " + ftpClient.getStatus()); ftpClient.changeWorkingDirectory(your directory name); ftpClient.setFileType(FTP.IMAGE_FILE_TYPE); //Your File path set here File file = new File("/sdcard/my pictures/image.png"); BufferedInputStream buffIn = new BufferedInputStream( new FileInputStream(myImageFile)); ftpClient.enterLocalPassiveMode(); ProgressInputStream progressInput = new ProgressInputStream( buffIn); boolean result = ftpClient.storeFile(UPLOADFILENAME + ".png", progressInput); System.out.println("result is :: " + result); buffIn.close(); ftpClient.logout(); ftpClient.disconnect(); } catch (Exception e) { e.printStackTrace(); } 

// ProgressInputStream

 import java.io.IOException; import java.io.InputStream; import android.os.Bundle; import android.os.Handler; import android.os.Message; public class ProgressInputStream extends InputStream { /* Key to retrieve progress value from message bundle passed to handler */ public static final String PROGRESS_UPDATE = "progress_update"; private static final int TEN_KILOBYTES = 1024 * 40; private InputStream inputStream; //private Handler handler; private long progress; private long lastUpdate; private boolean closed; public ProgressInputStream(InputStream inputStream) { this.inputStream = inputStream; this.progress = 0; this.lastUpdate = 0; this.closed = false; } @Override public int read() throws IOException { int count = inputStream.read(); return incrementCounterAndUpdateDisplay(count); } @Override public int read(byte[] b, int off, int len) throws IOException { int count = inputStream.read(b, off, len); return incrementCounterAndUpdateDisplay(count); } @Override public void close() throws IOException { super.close(); if (closed) throw new IOException("already closed"); closed = true; } private int incrementCounterAndUpdateDisplay(int count) { if (count < 0) progress += count; lastUpdate = maybeUpdateDisplay(progress, lastUpdate); return count; } private long maybeUpdateDisplay(long progress, long lastUpdate) { if (progress - lastUpdate < TEN_KILOBYTES) { lastUpdate = progress; sendLong(PROGRESS_UPDATE, progress); } return lastUpdate; } public void sendLong(String key, long value) { Bundle data = new Bundle(); data.putLong(key, value); Message message = Message.obtain(); message.setData(data); //handler.sendMessage(message); } } 

Esto se puede hacer usando la biblioteca Secure FTP Factory.

Sólo tiene que implementar una instancia de la interfaz com.jscape.inet.ftp.FtpListener , registrar la instancia con la clase Ftp y sobrecargar el método de progreso (evento FtpProgressEvent ) para capturar información de progreso.

JavaDoc: Descripción general (API de fábrica de FTP seguro)

Descargar: Java FTP, Java FTPS y Java SFTP Components

  • Problemas de conversión de entero en cadena
  • Android Google Maps v2, MAP_TYPE_NONE y cuadrados negros
  • Para eventos de Android, ¿por qué las sentencias switch son más comunes que if-else?
  • Import android.support no se puede resolver
  • Char a cadena secuencia desajuste en Java para caracteres Unicode
  • ¿Por qué mostrar java.lang.ClassCastException: android.text.SpannableString no se puede transmitir a java.lang.String?
  • Hacer una aplicación de Android que no se puede desinstalar / eliminar
  • InputStream - Tratamiento de los cambios de red
  • Gradle: Cómo crear dos aplicaciones para cada sabor con diferentes carpetas de activos:
  • Cómo utilizar la sentencia goto en Android
  • Desarrollo / implementación de Linux para Samsung Galaxy S3
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.