[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でもこれくらいのサイズのライブラリがぽこぽこあっても良いのかも、と思いました。