[解決済み】node.jsで画像をダウンロードする【終了しました
2022-04-14 04:56:13
質問
node.jsを使って、画像をダウンロードするスクリプトを書こうとしています。今のところ、こんな感じです。
var maxLength = 10 // 10mb
var download = function(uri, callback) {
http.request(uri)
.on('response', function(res) {
if (res.headers['content-length'] > maxLength*1024*1024) {
callback(new Error('Image too large.'))
} else if (!~[200, 304].indexOf(res.statusCode)) {
callback(new Error('Received an invalid status code.'))
} else if (!res.headers['content-type'].match(/image/)) {
callback(new Error('Not an image.'))
} else {
var body = ''
res.setEncoding('binary')
res
.on('error', function(err) {
callback(err)
})
.on('data', function(chunk) {
body += chunk
})
.on('end', function() {
// What about Windows?!
var path = '/tmp/' + Math.random().toString().split('.').pop()
fs.writeFile(path, body, 'binary', function(err) {
callback(err, path)
})
})
}
})
.on('error', function(err) {
callback(err)
})
.end();
}
しかし、私はこれをもっと強固なものにしたいと思っています。
- これを実現する、より優れたライブラリはありますか?
- レスポンスヘッダが嘘をつく可能性はありますか(長さやコンテンツタイプについて)?
- 他に気にすべきステータスコードはありますか?リダイレクトに悩むべきでしょうか?
-
どこかで読んだような気がしますが
binary
エンコーディングは非推奨になる予定です。その場合、どうすればいいのでしょうか? - Windowsで動作させるにはどうしたらいいですか?
- 他にこのスクリプトをより良くする方法があれば教えてください。
理由:imgurのように、ユーザーがURLを与えると、その画像をダウンロードし、複数のサイズで画像を再ホストする機能を実現するため。
解決方法は?
を使うことをお勧めします。 リクエストモジュール . ファイルのダウンロードは、以下のようなコードで簡単にできます。
var fs = require('fs'),
request = require('request');
var download = function(uri, filename, callback){
request.head(uri, function(err, res, body){
console.log('content-type:', res.headers['content-type']);
console.log('content-length:', res.headers['content-length']);
request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
});
};
download('https://www.google.com/images/srpr/logo3w.png', 'google.png', function(){
console.log('done');
});
関連
-
[解決済み] エラーメッセージ MongoError: bad auth URI 文字列で認証に失敗しました。
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] AndroidのListViewで画像を遅延ロードする方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsで環境変数を読み込む
-
[解決済み] Node.jsでファイル/ディレクトリが存在するかどうかを同期的にチェックする
-
[解決済み] Node.jsで現在のスクリプトのパスを取得するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】「npm install」と「npm rebuild」の違いとは?
-
[解決済み】Heroku + node.jsのエラー(Webプロセスが起動後60秒以内に$PORTにバインドできなかった)。
-
webpack ENOENTソリューションの起動
-
[解決済み】E11000重複キーエラー mongodb mongooseのインデックス
-
[解決済み】npm 5で作成されたpackage-lock.jsonファイルはコミットするのでしょうか?
-
[解決済み] ブラウザで動作しているURLで「connect ETIMEDOUT」エラーが発生する原因は何ですか?
-
[解決済み] AWS s3 api error: specified bucket does not exist.
-
[解決済み] Heroku "状態が起動から停止に変更されました SIGTERMで全プロセスを停止"
-
[解決済み] エラーです。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりません。