Pessoal estou tendo problema com o commons-net-2.0
Estou usando ele para enviar um arquivo via FTP.
Porem o código funciona perfeitamente até arquivo de uns 3mb, estou tentando enviar um arquivo de 25mb e não está indo.
Tirei um dúvida que não é problema do meu FTP, enviei utilizando o Fillezila e o arquivo foi normalmente.
Assim que executo ele fica processando, passa 10min, 30min, 1h e não conclui o envio. Minha net é de 1mb up, não deveria demorar tanto, que até pelo Fillezila não demora.
Obs.: O código está enviando arquivos, não apresenta erro. Só não envia arquivos grandes.
Segue o código…
package br.com.l2spartan.utils;
import java.io.File;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPClient;
/**
* @author L0ngh0rn
*/
@SuppressWarnings(
{
"UseOfSystemOutOrSystemErr", "CallToThreadDumpStack"
})
public class FTPUtils
{
public FTPClient estabeleceConexao(String servidor, String usuario, String senha)
{
FTPClient ftp = new FTPClient();
try
{
ftp.connect(servidor);
// verifica se conectou com sucesso!
if (FTPReply.isPositiveCompletion(ftp.getReplyCode()))
{
ftp.login(usuario, senha);
return ftp;
}
else
{
// erro ao se conectar
ftp.disconnect();
System.out.println("Conexão recusada");
ftp = null;
}
}
catch (Exception e)
{
System.out.println("Ocorreu um erro: " + e);
}
return ftp;
}
public static boolean transfereArqFTP(String servidor, String usuario, String senha, List<File> listaArquivos, String diretorio)
{
String nomeArquivo = null;
FTPClient ftp = new FTPClient();
try
{
ftp.connect(servidor);
//ftp.connect("localhost", 8012);
// verifica se conectou com sucesso!
if (FTPReply.isPositiveCompletion(ftp.getReplyCode()))
{
if (!ftp.login(usuario, senha))
{
ftp.disconnect();
System.out.println("Login recusado");
return false;
}
}
else
{
// erro ao se conectar
ftp.disconnect();
System.out.println("Conexão recusada");
return false;
}
String dir = "";
for (int i = 0; i < diretorio.length(); i++)
{
if (!diretorio.substring(i, i + 1).equals("\\"))
{
dir += diretorio.substring(i, i + 1);
}
else
{
if (!ftp.changeWorkingDirectory(dir.trim()))
{
ftp.disconnect();
System.out.println("Diretório de envio informado inexistente");
return false;
}
else
{
dir = "";
}
}
}
if (!ftp.changeWorkingDirectory(dir.trim()))
{
ftp.disconnect();
System.out.println("Diretório de envio informado inexistente");
return false;
}
// para cada arquivo informado...
for (Iterator iter = listaArquivos.iterator(); iter.hasNext();)
{
File arquivo = (File) iter.next();
// abre um stream com o arquivo a ser enviado
InputStream is = new FileInputStream(arquivo);
// pega apenas o nome do arquivo
int idx = arquivo.getName().lastIndexOf(File.separator);
if (idx < 0)
{
idx = 0;
}
else
{
idx++;
}
nomeArquivo = arquivo.getName();
// ajusta o tipo do arquivo a ser enviado
if (arquivo.getName().endsWith(".txt"))
{
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
}
else if (arquivo.getName().endsWith(".jpg"))
{
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
}
else
{
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
}
VerificaStatus vs = new VerificaStatus(ftp);
vs.start();
System.out.println("Enviando arquivo " + nomeArquivo + "...");
// faz o envio do arquivo
if (!ftp.storeFile(nomeArquivo, is))
{
ftp.disconnect();
System.out.println("Não foi possível enviar o arquivo " + nomeArquivo + "...");
return false;
}
else
{
System.out.println("Arquivo " + nomeArquivo + " enviado com sucesso!");
}
vs.parar();
}
ftp.disconnect();
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
catch (Throwable e)
{
e.printStackTrace();
return false;
}
}
public static boolean getArquivosFTP(String servidor, String usuario, String senha, String dirRetorno, String diretorioRecebimento)
{
try
{
FTPClient ftp = new FTPClient();
ftp.connect(servidor);
// verifica se conectou com sucesso!
if (FTPReply.isPositiveCompletion(ftp.getReplyCode()))
{
if (!ftp.login(usuario, senha))
{
ftp.disconnect();
System.out.println("Login recusado");
return false;
}
}
else
{
// erro ao se conectar
ftp.disconnect();
System.out.println("Conexão recusada");
ftp = null;
}
String dir = "";
for (int i = 0; i < dirRetorno.length(); i++)
{
if (!dirRetorno.substring(i, i + 1).equals("\\"))
{
dir += dirRetorno.substring(i, i + 1);
}
else
{
if (!ftp.changeWorkingDirectory(dir.trim()))
{
ftp.disconnect();
System.out.println("Diretório de recebimento informado inexistente");
return false;
}
else
{
dir = "";
}
}
}
if (!ftp.changeWorkingDirectory(dir.trim()))
{
ftp.disconnect();
System.out.println("Diretório de recebimento informado inexistente");
return false;
}
FTPFile[] files = ftp.listFiles();
for (int i = 2; i < files.length; i++)
{
if (files[i].getName().endsWith(".txt"))
{
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
}
else if (files[i].getName().endsWith(".jpg"))
{
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
}
else
{
ftp.setFileType(FTPClient.ASCII_FILE_TYPE);
}
if (files[i].getName().startsWith("requisicao") || files[i].getName().startsWith("fornecedor") || files[i].getName().startsWith("pedido"))
{
File file = new File(diretorioRecebimento + "\\" + files[i].getName());
OutputStream os = new FileOutputStream(file);
if (!ftp.retrieveFile(files[i].getName(), os))
{
System.out.println("Não foi possível trasnferir o arquivo " + files[i].getName() + "...");
}
else
{
System.out.println("Arquivo " + files[i].getName() + " trasnferido com sucesso!");
}
}
}
ftp.disconnect();
return true;
}
catch (Exception e)
{
e.printStackTrace();
return false;
}
}
public static class VerificaStatus extends Thread
{
private boolean parar = false;
private FTPClient _ftp;
public VerificaStatus(FTPClient ftp)
{
_ftp = ftp;
}
@Override
public void run()
{
while (!parar)
{
if (_ftp.isConnected())
{
System.out.println("Conexao Ativa!");
}
else
System.out.println("Conexao Inativa!");
sleepx(5000);
}
}
public void sleepx(long ms)
{
Long horaInicial = System.currentTimeMillis();
while (true)
{
try
{
Thread.sleep(ms);
break;
}
catch (Exception e)
{
if (System.currentTimeMillis() - ms > horaInicial)
break;
}
}
}
private void parar()
{
parar = true;
}
}
}
package br.com.l2spartan;
import br.com.l2spartan.utils.FTPUtils;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
/**
* @author L0ngh0rn
*/
@SuppressWarnings(
{
"UseOfSystemOutOrSystemErr", "CallToThreadDumpStack"
})
public class Main
{
public static void main(String[] args)
{
try
{
Scanner sc = new Scanner(System.in);
String diretorioDestino = "/web/Dados";
List<File> listaArquivos = new ArrayList<File>();
String arquivo = "d:/arquivo.rar";
//String arquivo = "d:/buffer.py";
File file = new File(arquivo);
if (file.isFile())
listaArquivos.add(file);
if (FTPUtils.transfereArqFTP("ftp.com.br", "user", "senha", listaArquivos, diretorioDestino))
System.out.println("Tranferencia feita com sucesso.");
else
System.out.println("Houve problema na tranferencia.");
}
catch (Exception e)
{
System.out.println("Ocorreram problemas ao executar.");
e.printStackTrace();
}
}
public static File[] listarArquivos(String path, final String ext, final Boolean desc)
{
File F = new File(path);
File[] files = F.listFiles(new FileFilter()
{
public boolean accept(File pathname)
{
return pathname.getName().toLowerCase().endsWith(ext);
}
});
Arrays.sort(files, new Comparator<File>()
{
public int compare(File o1, File o2)
{
return Long.valueOf(o2.lastModified()).compareTo(Long.valueOf(o1.lastModified()));
}
});
return files;
}
}
Se alguem passou por isso ou tenha alguma solução, preciso muito de ajuda. Muita coisa ainda não está utilizando justamente por causa desse problema, não dei continuidade ao meu sistema.
Aguardo.