Fiz uma aplicação para enviar um arquivo para um ftp, fui desenvolvendo e até funcionou mas quando fui abrir o arquivo enviado notei que ele esta corrompido, so consigo enviar imagem bem pequena tipo icone ai abro normal, agora arquivo maiores como foto, pdf, etc… ele sobe com tamanho original certinho faz o tempo do buffer e tudo mas na hora de abrir fala que o arquivo ta corrompido, ja setei todas permissões de pasta criei até um servidor ftp local pra evitar erro de permissão mas nada, e não da erro nenhum! Alguem tem um luz?
Outro detalhe arquivo txt funciona beleza…
Grato pela ajuda de sempre!
Segue a classe que faz o envio do arquivo com ftp:
package grafica;
import java.awt.Cursor;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JOptionPane;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPClient;
import sun.net.ftp.FtpClient;
public class Ftp extends Thread{
protected static FtpClient ftpClient;
public static int BUFFER_SIZE = 10240;
private String url;
private String username;
private String senha;
private String arquivo;
private String pasta;
private Grafica objGrafica;
private String NomeArquivo;
public void setUrl(String url) {
// TODO Auto-generated method stub
this.url = url;
}
public void setLogin(String username) {
// TODO Auto-generated method stub
this.username = username;
}
public void setSenha(String senha) {
// TODO Auto-generated method stub
this.senha = senha;
}
public void setArquivo(String arquivo) {
// TODO Auto-generated method stub
this.arquivo = arquivo;
}
public void setPasta(String pasta) {
// TODO Auto-generated method stub
this.pasta = pasta;
}
public void setGrafica(Grafica objGrafica) {
// TODO Auto-generated method stub
this.objGrafica = objGrafica;
}
public void setNomeArquivo(String NomeArquivo){
this.NomeArquivo = NomeArquivo;
}
public String calculaMb(long size){
int size_mb = (int) (( size / 1024 )/1024);
int resto = (Math.round (( size / 1024 )% 1024)) ;
int resto2 = (int) (( size % 1024 )*2);
String msg = "";
if(size_mb>0){
msg = size_mb+","+resto+" Mb";
//DecimalFormat FORMATA = new DecimalFormat("0.00");
}else{
int size_kb = Math.round ( size / 1024 );
msg = size_kb+" Kb";
}
return msg;
}
public void run(){
String nomeArquivo = null;
try {
ftpClient = new FtpClient(url);
ftpClient.login(username, senha);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
ftpClient.cd("testeftp");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println(pasta);
String arq = arquivo;
nomeArquivo = arq;
long tam = 0;
int pos = 0;
byte[] buffer = new byte[BUFFER_SIZE];
try {
File f = new File(arq);
int size = (int) f.length();
int mb = size / 1024;
int mb_env;
objGrafica.load.setMaximum(size);
FileInputStream in = new FileInputStream(arq);
OutputStream out = ftpClient.put(NomeArquivo);
int counter = 0;
while (true) {
int bytes = in.read(buffer);
if (bytes < 0)
break;
out.write(buffer, 0, bytes);
counter += bytes;
objGrafica.load.setValue(counter);
int proc = (int) Math.round(objGrafica.load.getPercentComplete() * 100);
mb_env = counter / 1024;
objGrafica.lbEnvPor.setText(proc+"%");
objGrafica.load.setString("Enviando arquivo - "+calculaMb(counter)+" de "+calculaMb(size));
}
objGrafica.load.setString("ENVIO CONCLUÍDO!");
out.close();
in.close();
objGrafica.btnFechar();
//JOptionPane.showMessageDialog(null, "Arquivo enviado com sucesso!", "Concluido",JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
System.out.println("Error: " + ex.toString());
}
}
}