Estou criando uma função de upload de arquivo no node.js com o express 3.
Gostaria de pegar a extensão do arquivo da imagem. para que eu possa renomear o arquivo e depois anexá-lo à extensão.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
Como posso obter a extensão da imagem no node.js?
javascript
node.js
file-type
georgesamper
fonte
fonte
Respostas:
Eu acredito que você pode fazer o seguinte para obter a extensão de um nome de arquivo.
fonte
app.css.gz
retornarão apenas.gz
e não.css.gz
, o que pode ou não ser o que você deseja.filename.split('.').pop();
.
.'filename.css.gz'.split('.').slice(1).join('.')
obter todas as extensõesjone.lastTest.654654556.tar.gz
aqui a extensão que se espera é tar.gz, mas se você aplicar qualquer função que dão forma 1 ponto, não vai funcionar como você pode verAtualizar
Como a resposta original extname () foi adicionada ao
path
módulo, consulte Resposta do SnowfishResposta original:
Estou usando esta função para obter uma extensão de arquivo, porque não encontrei uma maneira de fazê-lo de uma maneira mais fácil (mas acho que existe):
você deve exigir 'caminho' para usá-lo.
outro método que não usa o módulo de caminho:
fonte
var is = fs.createReadStream(req.files.upload.path), fileType = is.path.split(/[. ]+/).pop();
Se você estiver usando express, adicione a seguinte linha ao configurar o middleware (bodyParser)
fonte
É muito mais eficiente usar o
substr()
método em vez desplit()
&pop()
Veja as diferenças de desempenho aqui: http://jsperf.com/remove-first-character-from-string
Atualização em agosto de 2019 Como apontado por @xentek nos comentários;
substr()
agora é considerado uma função herdada ( documentação MDN ). Você pode usar em seusubstring()
lugar. A diferença entresubstr()
esubstring()
é que o segundo argumento desubstr()
é o tamanho máximo a ser retornado, enquanto o segundo argumento desubstring()
é o índice no qual parar (sem incluir esse caractere). Além disso,substr()
aceita posições iniciais negativas para serem usadas como um deslocamento do final da string, enquantosubstring()
não.fonte
substr
ele é considerado uma função legado e deve ser evitado quando possível - Mais informações sobre MDNEsta solução suporta querystrings!
fonte
Uma solução simples, sem necessidade de exigir, que resolva o problema de extensão de vários períodos:
Ou se você não quiser o ponto inicial:
Certifique-se de testar se o arquivo também possui uma extensão.
fonte
Eu acho que o mapeamento do cabeçalho Content-Type na solicitação também funcionará. Isso funcionará mesmo nos casos em que você enviar um arquivo sem extensão. (quando o nome do arquivo não tiver uma extensão na solicitação)
Suponha que você esteja enviando seus dados usando HTTP POST:
Aqui, o nome Content-Type header contém o tipo MIME dos dados. O mapeamento desse tipo de mime para uma extensão fornecerá a extensão do arquivo :).
Restify BodyParser converte esse cabeçalho em uma propriedade com o tipo de nome
Você pode usar esse cabeçalho e fazer o mapeamento de extensão (substring etc ...) manualmente, mas também existem bibliotecas prontas para isso. Abaixo dois foram os principais resultados quando eu fiz uma pesquisa no google
e seu uso também é simples:
o snippet acima imprimirá png no console.
fonte
fonte
path.extname
fará o truque na maioria dos casos. No entanto, incluirá tudo após o último.
, incluindo a sequência de caracteres de consulta e o fragmento de hash de uma solicitação http:Nesses casos, convém tentar algo como isto:
Observe que extensões com vários períodos (como
.tar.gz
), não funcionarão compath.extname
.fonte
A função a seguir divide a sequência e retorna o nome e a extensão, não importa quantos pontos existam na extensão. Retorna uma string vazia para a extensão, se não houver nenhuma. Nomes que começam com pontos e / ou espaço em branco também funcionam.
fonte
importe extname para retornar a extensão do arquivo:
onde arquivo é o arquivo 'nome' do formulário
fonte
Você pode usar path.parse (path) , por exemplo
fonte
Tente este
fonte