Identificando o tipo MIME em Ruby
Publicado em Developer
filetypes mime ruby
Estou trabalhando em um projeto onde temos que identificar os tipos MIME dos arquivos enviados corretamente (fora do controller, que tem o content_type enviado), e em alguns dos testes feitos (vocês fazem testes, correto?) foi identificado que o tipo incorreto de um arquivo estava passando, sendo "ludiabriado" apenas trocando a extensão do arquivo.
Verificando a gem que eu estava utilizando, vi que ela, como tantas outras, levava em conta a extensão do arquivo para retornar o MIME, o que achei bem frágil. Era só copiar um .jpg como .zip para ele retornar o tipo como application/zip, aí não rolava.
Foi aí que encontrei a Mahoro. Ela se utiliza do funcionamento da libmagic (ei, não é a ImageMagick hein!), que utiliza o mesmo princípio de identificação de arquivos que o comando file, que é um "sistema de padrões mágicos", como descrito:
The file(1) command identifies the type of a file using, among other tests, a test for whether the file contains certain ''magic patterns''. The file /usr/share/misc/magic specifies what patterns are to be tested for, what message or MIME type to print if a particular pattern is found, and additional information to extract from the file.
Para instalar a gem, é necessário algumas libs, que no Ubuntu são:
sudo apt-get install libmagic1 libmagic-dev
Para usar depois, bem fácil, pegando de exemplo um .zip que copiei como .jpg:
require "mahoro" Mahoro.new(Mahoro::MIME).file("/tmp/caca.jpg").split(";")[0]
Isso retorna corretamente application/zip. Vale lembrar acredito que isso não vai funcionar em sistemas windows ... mas você não está rodando o seu projeto lá, está? ;-)
Comentários
Comentários fechados.
Artigos anteriores
- Pull requests em modo raiz - sex, 22 de dezembro de 2023, 09:57:09 -0300
- Qual a idade do seu repositório? - ter, 27 de dezembro de 2022, 12:50:35 -0300
- Utilizando ctags em projetos Rails mais recentes - qui, 24 de junho de 2021, 08:23:43 -0300
- Fazendo o seu projeto brotar - seg, 15 de julho de 2019, 08:57:05 -0300
- Learn Functional Programming with Elixir - sex, 02 de março de 2018, 18:47:13 -0300
- Ambiente mínimo - Driver Driven Development - qua, 23 de agosto de 2017, 15:15:03 -0300
- Ambiente mínimo - repositórios de código - dom, 16 de abril de 2017, 13:02:14 -0300
- Ambiente mínimo - terminal e navegador - dom, 02 de abril de 2017, 21:43:29 -0300
- Utilizando muitas gems no seu projeto? - sáb, 29 de outubro de 2016, 11:57:55 -0200
- Desenvolvedores e inteligência artificial - seg, 11 de julho de 2016, 09:09:38 -0300
muito bom...