Home / Programmazione / Java Android / FTP upload in Android
Mattepuffo

FTP upload in Android

FTP upload in Android

Oggi vediamo una semplice classe per l'upload di file su un server remoto tramite FTP.

Per la connessione FTP useremo la "solita" libreria Apache Commons Net.

Una volta scaricata, integratela nel progetto.

Non ci resta che vedere la classe:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class UploadFile {

    private static final String HOSTNAME = "";
    private static final String USER = "";
    private static final String PASSWORD = "";

    public static void uploadFile(String localFile) throws SocketException,
            IOException {
        if (new File(localFile).exists()) {
            FTPClient ftp = new FTPClient();
            ftp.connect(HOSTNAME);
            ftp.login(USER, PASSWORD);
            ftp.setFileType(FTP.BINARY_FILE_TYPE);
            ftp.changeWorkingDirectory("/dir_to_upload");
            int reply = ftp.getReplyCode();
            if (FTPReply.isPositiveCompletion(reply)) {
                FileInputStream in = new FileInputStream(new File(localFile));
                ftp.enterLocalPassiveMode();
                ftp.storeFile("file.zip", in);
            }
            ftp.logout();
            ftp.disconnect();
        }
    }

}

Come vedete non è nulla di complicato; anzi fino a qui è praticamente uguale a un classico programma scritto in Java.

A questo punto, per effettuare l'upload dalla vostra Activity, vi serve qualcosa del genere:

  private class DoUpload extends AsyncTask<Object, Object, Object> {

        private ProgressDialog pd = new ProgressDialog(ActivityMain.this);

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            pd.setMessage("...Creating Excel...");
            pd.show();
        }

        @Override
        protected Object doInBackground(Object... params) {
            try {
                UploadFile.uploadFile("file.zip");
            } catch (SocketException e) {
            } catch (IOException e) {
            }
            return null;
        }

        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
            pd.dismiss();
        }
    }

Quindi usando AsyncTask come per tutte le operazioni del genere.

Enjoy!