File Upload

9 respostas
b10machado

então pensando em como fazer o upload primeiro fiz esse esquema para manipular o arquivo, com doc e fotos vai trakilo, mais arquivos mais pesados tipo .rar e etc
ele passa o arquivo so q corrompido, podem me ajudar nisso, e se é dessa maneira msm q uso classe para fazer upload.

Vlw

public class Servidor {
	
public static void main(String[] args) throws  IOException{
        
        ServerSocket servidor = new ServerSocket(1234);
        
        Socket sv = servidor.accept();
        
        ObjectInputStream out = new ObjectInputStream(sv.getInputStream());
        
        FileOutputStream file = new FileOutputStream("C:/Users/bruno.machado/Desktop/pacteste.rar");
        
        byte[] buf = new byte[4086];
        
        while(true){
            
            int len = out.read(buf);
            if(len == -1) break;
            file.write(buf,0,len);
        }        
    }
}
================================

public class Cliente {
	
        public static void main(String[] args)throws UnknownHostException,IOException{
        Socket cliente = new Socket("172.23.239.106", 1234);
        
        ObjectOutputStream out = new ObjectOutputStream(cliente.getOutputStream());
        
        FileInputStream file = new FileInputStream("C:/Users/bruno.machado/Documents/pc.rar");
        
        byte[] buf = new byte[4086];
        
        while(true){
            
            int len = file.read(buf);
            if(len == -1) break;
            out.write(buf,0,len);
        }   
   }
}

9 Respostas

CristianPalmaSola10

O arquivo naum fica corompido por causa desse trecho de codigo

byte[] buf = new byte[4086];

talvez ler o tamanho do input stream e ai entaum inicializar esse buffer com o tamanho do input
e porque de

while(true)

voce naum que parar de executar nunca mais

b10machado

entao cara to meio q tentando desenvolver certinho e nao tenho experiecia com isso de files e uploads.

como faço para ler o tamanho do inputstream??

isso do while, qdo eu for colocar no upload do meu jsf , tento algum esquema de executar por algum evento por enquanto fica assim msm

vlw

CristianPalmaSola10

Cara naum sei de cabeça, corre um pouco atras não espere tudo pronto

vc ta usando um ide faz o seguinte

pega sua varivel . ai a ide vai de mostrar todos os metodos que vc pode chamar dela, da uma olhada se tem algum metodo size ou a propriedade length

b10machado

entao no input stream eu num achei por isso perguntei as vezes tinha algum esqueminha, pra pegar p tamanho so com File file = … ai dele eu consigo ver o tamanho do arquivo, mais eu testei colocando na mao e msm assim o arquivo esta dando Danificado!!!

E

Estou supondo que a palavra que você está querendo escrever é “corrompido”.
Isto posto, por que é que você está usando um ObjectOutputStream?
O ObjectOutputStream não deve ser usado se você não souber como ele funciona - basicamente, ele inclui um monte de dados que corrompem seu arquivo de destino.
Seu programa está quase certo. Acho que ele estaria mais certo (mas não tenho como conferir) se você fizer assim:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Servidor {

    private static final int BUFFERSIZE = 4 * 1024;
    
    public static void main(String[] args) {

        BufferedInputStream input = null;
        BufferedOutputStream output = null;
        Socket sv = null; 
        try {
            ServerSocket servidor = new ServerSocket(1234);

            sv = servidor.accept();
            
            input = new BufferedInputStream (sv.getInputStream());
            output = new BufferedOutputStream (
                new FileOutputStream("C:/Users/bruno.machado/Desktop/pacteste.rar"), 
                BUFFERSIZE);
    
            byte[] buf = new byte[BUFFERSIZE];
    
            while (true) {
                int len = input.read(buf);
                if (len == -1)
                    break;
                output.write(buf, 0, len);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try { sv.close(); } catch (IOException ex) { } 
            try { input.close(); } catch (IOException ex) { } 
            try { output.close(); } catch (IOException ex) { } 
        }
    }
}
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class Cliente {
    private static final int BUFFERSIZE = 4 * 1024;

    public static void main(String[] args) throws UnknownHostException, IOException {
        
        
        Socket cliente = null;
        BufferedInputStream input = null;
        BufferedOutputStream output = null;
        
        try {
            cliente = new Socket("172.23.239.106", 1234);
            input = new BufferedInputStream (
                new FileInputStream ("C:/Users/bruno.machado/Documents/pc.rar"), BUFFERSIZE);
            output = new BufferedOutputStream (cliente.getOutputStream());
            byte[] buf = new byte[BUFFERSIZE];

            while (true) {

                int len = input.read(buf);
                if (len == -1)
                    break;
                output.write(buf, 0, len);
                output.flush();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try { cliente.close(); } catch (IOException ex) { } 
            try { input.close(); } catch (IOException ex) { } 
            try { output.close(); } catch (IOException ex) { } 
        }
    }
}
ViniGodoy

Por favor, evite destacar o óbvio no título de seus tópicos. Se você não tivesse dúvidas, nem sequer teria aberto o tópico, certo?

b10machado

rsrs ja corrigir a palavra desculpe nao tinha lido apos postar a duvida.

cara funcionou perfeito, no caso eu vou ter uma aplicaçao que vai compartilhar arquivo, essas duas classe são o suficiente para uploads de arquivos, ou terei que fazer mais coisas, quais??


caso vc queira entender o que estou fazendo: e um sistema estilo dropbox, vou subir arquivos para um diretorio com o nome do usuario, e os “amigos” desse usuario vai visualizar uma lista com esses arquivos e poderar baixalos

Obrigado

E

Provavelmente você vai ter de pensar um pouco. Digamos que você tenha 2 amigos subindo ou descendo arquivos ao mesmo tempo. Seu programa não prevê esse tipo de coisas .

b10machado

sim no caso vao entrar esses esquemas de 2 ou mais subindo ao msm tempo, no meio da transferencia cair net e etc.

blz vou da uma pensar um poko mais para essas partes, caso tenha algum forum ou tutorial para indicar que me ajude por favor posta ai.

Obrigado.

Criado 19 de julho de 2012
Ultima resposta 19 de jul. de 2012
Respostas 9
Participantes 4