Converter de byte[] para java.io.File

Olá pessoal, tudo bem?

Como que eu faço a conversão de byte[] para File?

Aproveitando, como que eu defino a extensão do arquivo ByteArrayInputStream? Por exemplo, eu gravo um arquivo .wmv e ele me retorna o mesmo arquivo mas como .asx…
Como que eu arrumo isso?

Eu estava pensando em usar a classe FileDownload onde eu informo o tipo do objeto, está correto? A tag consequiria interpretar essa classe?

Você não faz.

  1. byte[] é um conjunto de bytes;
  2. File descreve o caminho de um arquivo.

O máximo que vc pode fazer é gravar o seu byte[] num arquivo, descrito por um File:


File file = new File("meuarquivo.dat"); //Criamos um nome para o arquivo
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); //Criamos o arquivo
bos.write(bytes); //Gravamos os bytes lá
bos.close(); //Fechamos o stream.

Não entendi sua segunda pergunta. O ByteArrayInputStream não guarda qualquer informação sobre nome ou estrutura do arquivo.

Então como que eu resolveria este problema? Eu estou retornando uma extensão diferente da que eu gravei…

A propósito, isso é um campo BLOB e eu estou gravando e tentando pegar. Mas para fazer com vídeos está mais complicado…

Você deve gravar a mesma extensão. Para isso, guarde a extensão no banco.

As classes de stream só enxergam bytes. Para ela tanto faz o nome que você dá para esses bytes.

Então como que eu faço para retornar um ByteArrayInputStream com o nome que eu desejar?

O nome você define na hora de gravar o stream, como fiz acima.

Na verdade eu não quero gravar arquivos fisicamente, eles são gravados em campos BLOB e quando solicitados, eu os mostro na página HTML…

Com imagens funciona muito bem, mas com vídeos não, ele troca a extensão…

vc precisa da extensão. Senão como vc vai saber o que gravou? :roll:
t+

É como eu falei. Então vc grava em outra coluna qual extensão aqueles dados do blob tem.

Lembre-se blobs e stream trabalham com bytes brutos. Eles não sabem o que aqueles bytes representam. Essa informação adicional você tem que guardar em algum lugar, e fornecer para quem lê esses dados.

Então, eu devolvo esses bytes como um ByteArrayInputStream e dessa forma eu os visualizo em uma IMG tag…

Pessoal, estou com dúvidas sobre o campo BLOB (Oracle PL/SQL).

É possível capturar o nome e extensão do arquivo dentro deste campo?
Ou o campo Binário não armazena o arquivo e seu nome com a extensão?

Obrigado.

O campo Blob só armazena os bytes.

Como ele é lido externamente (nome, extensão, tamanho), não.

[quote=Rafael Guerreiro]O campo Blob só armazena os bytes.

Como ele é lido externamente (nome, extensão, tamanho), não.[/quote]

Obrigado por responder Rafael.
Irei armazenar a extensão dos arquivos em um campo separado.

Pessoa como eu faço a divisão de um arquivo em bytes e depois o salvo em um servidor FTP ?

Sugiro você criar um tópico só sobre isso. Não tem nada a ver com o problema postado aqui…

Ok Rafael, estou sofrendo com isso a horas srrs, obrigado !