Enviar arquivo via socket e gravar no banco de dados

8 respostas
L

Pessoal eu já fiz uma classe cliente e uma classe servidor que ficam trocando strings.

Agora eu gostaria de saber como faço para enviar um arquivo para o servidor e lá ele recuperar esse arquivo e gravar no banco de dados.

Alguém tem algum exemplo?

8 Respostas

ViniGodoy

http://www.guj.com.br/posts/list/136538.java#735860
http://www.faqs.org/rfcs/rfc959.html

L

Olá, ViniGodoy

No meu protocolo eu sempre envio para o servidor uma string separada pelo caracter ‘+’ e um char para o servidor saber qual opção eu quero.

So que, em um caso vou ter que enviar um arquivo para o servidor. Esse arquivo eu mando em um array de bytes. Quando esse array de bytes chegar no servidor eu gostaria de colocar ele em um File para poder salvar no banco.

ViniGodoy

Então, seu protocolo deve sinalizar de alguma forma que agora você irá enviar um array de bytes.

Aí vc tem duas opções. Enviar os bytes diretamente (a melhor, na minha opinião).

Ou codifica-lo também em String usando Base-64. Isso mantém o protocolo em String, mas há um custo. A quantidade de bytes enviadas em Base-64 é muito maior, quase três vezes o tamanho do arquivo.

L

Olá, ViniGodoy

O Meu protocolo já sabe que estou enviando um array de bytes. Eu não estou conseguindo é fazer é pegar esse array de bytes e transforma-los em um File para poder salvar no banco de dados.

ViniGodoy

Mas pq vc não salva diretamente no banco de dados, através do método %29"]setBytes do preparedstament?

Ainda assim, se seu problema é só jogar um array de bytes num arquivo, eis a solução:

FileOutputStream fos = new FileOutputStream(new File("seuArquivo.txt")); fos.write(bytes); fos.close();

L

Beleza ViniGogoy.

E se esse arquivo for uma imagem?

ViniGodoy

Não faz diferença. Isso salva um conjunto de bytes, seja ele o que for. Só no caso da imagem é bom também salvar em algum lugar o formato (jpg, gif, png)…

L

Olá ViniGodoy,

A leitura do arquivo está assim:

FileOutputStream fos = new FileOutputStream(name);
while(true) {
	int lenght = in.read(buffer);
	if(lenght == -1) break;
	fos.write(buffer, 0, lenght);
}
	fos.flush();
	fos.close();

Não consigo salvar esse arquivo no banco. Teria um exemplo?

Criado 6 de outubro de 2010
Ultima resposta 10 de out. de 2010
Respostas 8
Participantes 2