[Node.js] ファイルの拡張子とMIME Typeを取得する
はじめに
おばんです、昨日は Node学園祭 に参加して、初めて業務以外でNode.jsにまつわることに触れた田中です。ステッカーがお茶っぽくてカッコかわいかったです。
「そんな熱にアテられて」というわけではありませいが、今回はファイルの拡張子とMIME TypeをNode.jsで取得する方法と、どういうときにそれらの情報が欲しくなるかを紹介します。
file-typeを使う
こちらを使うことで以下のようなコードで拡張子とMIME Typeを取得することができます。
const fs = require('fs') const filetype = require('file-type') const file = fs.readFileSync(__dirname + '/image.png') // ファイルを取得 console.log(filetype(png)) //=> {ext: 'png', mime: 'image/png'}
ファイルの拡張子とMIME Typeが欲しくなるとき
たとえば自分は Amazon S3 にファイルを PUT するときのファイル名と ContentType の指定にほしくなりました。
以下のサンプルコードでは Key(=ファイル名) と ContentType(=MIME Type) を指定するのに file-type
を使用しています。
const uuidv4 = require('uuid/v4') const aws = require('aws-sdk') module.exports = async (file) => { const s3 = new aws.S3() const fileType = filetype(file) const extension = fileType.ext const mimeType = fileType.mime const params = { Body: file, Bucket: 'hogehoge_bucket_name', Key: [uuidv4(), extension].join('.'), ContentType: mimeType } await s3.putObject(params).promise() }
さいごに
今回はちょうど使用例で紹介したようなことをやろうとしていて、ファイルの拡張子とMIME Typeが欲しくなっていました。JavaScriptは良いですね、欲しいと思ったらだいたいのものがすでにnpmで提供されています! 自分はもともとSwift書きでしたが、Swiftでもこれくらいのサイズのライブラリがぽこぽこあっても良いのかも、と思いました。