標準リクエストモジュールを使用して、次のスクリプトを実行してファイルのMIMEタイプをチェックすることができます。request-promise:ファイルのMIMEタイプをダウンロード/チェックしますか?
var request = require('request');
var url = "http://www.somedomain.com/somepicture.jpg";
var magic = {
jpg: 'ffd8ffe0',
png: '89504e47',
gif: '47494638'
};
var options = {
method: 'GET',
url: url,
encoding: null // keeps the body as buffer
};
request(options, function (err, response, body) {
if(!err && response.statusCode == 200){
var magicNumberInBody = body.toString('hex',0,4);
if (magicNumberInBody == magic.jpg ||
magicNumberInBody == magic.png ||
magicNumberInBody == magic.gif) {
console.log("It's an image!");
return true;
}
}
});
これはかなり自明です。しかし、node.jsを使ってPromisesに頼っているとき、どうすれば上記のことができますか?私はrequest-promiseをインストールして使用しようとしていて、次のスクリプトを書きました。
return rp("http://www.somedomain.com/somepicture.jpg")
.then((response) => {
var magicNumberInBody = response.toString('hex',0,4);
console.log(magicNumberInBody);
if (magicNumberInBody == magic.jpg ||
magicNumberInBody == magic.png ||
magicNumberInBody == magic.gif) {
console.log("It's an image!");
return true;
}
しかし、html/txtに基づいていないものについては、リクエストの約束は生のバイナリを返すようです。
上記のデータを意味のあるものに変更する方法は誰にも分かりますが、MIMEタイプがjpg/png/gifであるかどうかを簡単に識別できますか?
rp({
uri: "http://www.somedomain.com/somepicture.jpg",
resolveWithFullResponse: true
}).then(res => {
console.log(res.headers['content-type'])
})
ありがとうございます。私はこれより多くのデータを入手しましたが、実際のスクリプトを実行する方法はまだありません。 res.headers ['content-type']は画像の "content-type": 'application/octet-stream'を返すだけです。実際のMIMEタイプを表示する必要があります。 – Eoghan
申し訳ありませんが、これは他の問題であり、それについてはほとんどできません。https://stackoverflow.com/questions/9707204/how-handling-images-mime-type-application-octet-stream – martriay