Fazer download direto de um arquivo via protocolo HTTP

5 respostas
wchagas

Bom dia amigos. Alguém sabe uma forma de baixar um arquivo via protocolo HTTP, mas que não seja feito através do browser? Queria que ele baixasse diretamente no disco tipo, copiar o arquivo de um servidor, via HTTP, para o HD.

Agradeço a todos por qualquer ajuda :thumbup:

5 Respostas

gregorioarthur
private void download() throws Exception {

        brProgresso.setIndeterminate(true);
        inStatus.setText("Fazendo Download");
        btDownload.setEnabled(false);

        SwingWorker sw = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {

                int buffer = 8 * 1024;

                URL from = new URL(parameters.get("files"));

                BufferedInputStream urlIn = new BufferedInputStream(
                        from.openConnection().getInputStream(), buffer);

                BufferedOutputStream outFile = new BufferedOutputStream(
                        new FileOutputStream(selectLocation()), buffer);

                writeToFile(urlIn, outFile, buffer);

                urlIn.close();
                outFile.close();

                return null;
            }

            @Override
            protected void done() {

                brProgresso.setIndeterminate(false);
                inStatus.setText("Terminado.");
                btDownload.setEnabled(true);
            }
        };

        sw.execute();
    }

    private void writeToFile(InputStream in, OutputStream out, int buffer)
            throws IOException {

        int read = -1;

        byte[] buf = new byte[buffer];

        while ((read = in.read(buf, 0, buffer)) >= 0) {
            out.write(buf, 0, read);
        }

        out.flush();
    }

Precisei fazer isso uma vez, o código ta meio zoado pq eh uma app antiga q fiz… Mas da um look pra ver se te ajudar…

O

wget?

matheuslmota

Tu pode usar o wget:

Runtime.getRuntime().exec("wget -c http://urldoarquivo");

No windows não existe o wget nativamente, mas você pode baixá-lo e usar para executar a linha de código que eu passei. Você deve compilar a linha em uma classe e colocar o wget.exe no mesmo diretório do compilado da classe.

matheuslmota
gregorioarthur:
private void download() throws Exception {

        brProgresso.setIndeterminate(true);
        inStatus.setText("Fazendo Download");
        btDownload.setEnabled(false);

        SwingWorker sw = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {

                int buffer = 8 * 1024;

                URL from = new URL(parameters.get("files"));

                BufferedInputStream urlIn = new BufferedInputStream(
                        from.openConnection().getInputStream(), buffer);

                BufferedOutputStream outFile = new BufferedOutputStream(
                        new FileOutputStream(selectLocation()), buffer);

                writeToFile(urlIn, outFile, buffer);

                urlIn.close();
                outFile.close();

                return null;
            }

            @Override
            protected void done() {

                brProgresso.setIndeterminate(false);
                inStatus.setText("Terminado.");
                btDownload.setEnabled(true);
            }
        };

        sw.execute();
    }

    private void writeToFile(InputStream in, OutputStream out, int buffer)
            throws IOException {

        int read = -1;

        byte[] buf = new byte[buffer];

        while ((read = in.read(buf, 0, buffer)) >= 0) {
            out.write(buf, 0, read);
        }

        out.flush();
    }

Precisei fazer isso uma vez, o código ta meio zoado pq eh uma app antiga q fiz... Mas da um look pra ver se te ajudar...

O que seria esse objetos parameters?

gregorioarthur

eh parte do meu aplicativo…

Dei uma filtrada no código pra vc poder usar… segue abaixo:

package download;

import java.net.URL;

import java.io.*;

/**
 *
 * @author Arthur Gregorio
 *
 * @since 1.0
 * @version 1.0, 08/07/2011
 */
public class Download {

    public void getFrom(String url) throws IOException {
        
        int buffer = 8 * 1024;
        
        URL from = new URL(url);
        
        BufferedInputStream urlIn = new BufferedInputStream(
                from.openConnection().getInputStream(), buffer);
        
        BufferedOutputStream outFile = new BufferedOutputStream(
                new FileOutputStream(System.getProperty("user.home")), buffer);
        
        writeToFile(urlIn, outFile, buffer);
        
        urlIn.close();
        outFile.close();
    }

    private void writeToFile(InputStream in, OutputStream out, int buffer)
            throws IOException {

        int read = -1;

        byte[] buf = new byte[buffer];

        while ((read = in.read(buf, 0, buffer)) >= 0) {
            out.write(buf, 0, read);
        }

        out.flush();
    }
}

falow!

Criado 8 de julho de 2011
Ultima resposta 8 de jul. de 2011
Respostas 5
Participantes 4