Saber Extensão de Arquivo e Nome do Arquivo pelo BLOB - Download

Pessoal, estou com um problema,
tem um servlet que le o campo BLOB do banco e retorna ao usuário o arquivo escrito em bytes, para fazer o download

No response.setContentType coloco a informação de acordo com o tipo de arquivo
Porém, este setContentType é dinamico, sei que existe o Mime Mapping, para mapear os tipos de arquivos, e eu retornaria a resposta correta,

mas eu gostaria de devolver para o usuario a extensão e o nome, sem ter que salvar isso no banco em outra coluna da tabela!

Tem como eu extrair estas informações de um BLOB? InputStream e transformar em File e saber o nome e extensão? algo do tipo, sem que eu precise gravar os nomes e as extensões no banco de dados?

Outra coisa, que me é estranho é que, vamos supor que eu faço um programa no qual gera arquivo com extensão .guj
eu inventei esta extensão, logo, se eu quiser fazer o download deste tipo de arquivo.guj o que eu definiria no ContentType para que me retorne o arquivo do BLOB, com esta extensão?

Porque os MIME são predefinidos… e para os que nao existem?
Tinha que existir uma maneira simples de retornarmos a extensão que queremos.

Alguem pode ajudar?

Dias.

Quanto à primeira dúvida, não tem como pegar esses valores, pois o campo BLOB só guarda os bytes. Você vai pegar esses bytes e dar alguma extensão.

A extensão é só para o programa que vai ler o arquivo conseguir formatá-lo e interpretá-lo da forma esperada. Por exemplo, você pode salvar um .xml, .html, .css, .js em .txt e tratar tudo como .txt…

Então, para retornar o nome do arquivo, a extensão e o Mime type, você vai precisar guardar em uma coluna no banco.

Quanto ao Mime type, você tentou criar um? Coloque um que não existe… Nunca tive essa necessidade, então não posso te ajudar muito. Mas ao meu ver, isso não é um problema…

O jeito mais simples e limpo é colocar as informações do arquivo em colunas do banco mesmo.

Uma maneira alternativa é zipar os arquivos (no próprio programa Java) antes de salvar no banco, gravando no BLOB o zipado. O arquivo ZIP tem as informações de todos os arquivos que estão dentro dele. Assim o usuário baixaria o zip com um nome genérico, o mime type você já sabe qual é (zip), e quando ele abrir na máquina dele o arquivo original está dentro com seu nome e tipo preservados.

E sobre os MIME types para arquivos desconhecidos, existe um tipo exatamente para isso (dados genéricos) que é o application/octet-stream

Obrigado Rafael pela resposta, realmente não dá para pegar esse tipo de informação de um BLOB.
Mas gostei muito da sugestão do gomesrod, como não pensei nisso antes!

Vou fazer desta forma.
Legal, muito obrigado mesmo.

Abraços.

Dias.