使用 Node.js 下载多个映像
Download multiple images with Node.js
我需要一次从几个网站下载很多文件,我有这个代码
var http = require('http');
var fs = require('fs');
var arr = ['http://www.bonyfarma.com/images/Bony%20Air.jpg', 'http://www.bonyfarma.com/images/Bony%20A-Booster.jpg'];
for (var i = arr.length - 1; i >= 0; i--) {
var file = fs.createWriteStream(arr[i].split('/').pop(-1).toLowerCase().replace("%20", "-"));
var request = http.get(arr[i], function(response) {
response.pipe(file);
});
};
但是例如,当我运行此代码时,第一个文件为空,仅下载第二个文件。你能帮我解决这个问题吗?
var http = require('http');
var fs = require('fs');
var arr = ['http://www.bonyfarma.com/images/Bony%20Air.jpg', 'http://www.bonyfarma.com/images/Bony%20A-Booster.jpg'];
for (var i = arr.length - 1; i >= 0; i--) {
(function(url){
var file = fs.createWriteStream(url.split('/').pop(-1).toLowerCase().replace("%20", "-"));
http.get(url, function(response) {
response.pipe(file);
});
})(arr[i]);
};
这样做
的原因是你的file
变量被吊在for
循环之外。这会导致所有响应都通过管道传输到最后创建的流。
解决此问题的最简单方法是使用简单的Array.prototype.forEach
正确限定变量的范围(节点支持此功能):
arr.forEach(function(url) {
var file = fs.createWriteStream(url.split('/').pop(-1).toLowerCase().replace("%20", "-"));
var request = http.get(url, function(response) {
response.pipe(file);
});
});
相关文章:
- 如何使jQuery中的悬停函数单独应用于数据库映像
- 无法在Safari中加载跨源映像(来自CloudFront)
- 有没有一种方法可以从chrome'的存储映像
- 如何在不必维护每个文件的两个版本的情况下,将通用JavaScript和映像部署到两个不同的EAR
- 在使用 Django 静态文件时动态设置映像时,只有绝对路径才能与 jquery 一起使用
- 获取我的数组中的每个 ID 映像 src
- 映像选取器在初始化时预选项
- 循环映像 IE7 问题
- 本地映像对象未在Javascript中正确初始化
- PHP抓取没有扩展的远程映像
- 如何在ASP.NET Response.BinaryWrite生成的Javascript中处理字节数组映像
- 如何确保在 HREF 触发之前下载并显示映像
- 使用 Node.js 下载多个映像
- 如何使用科尔多瓦文件传输下载 base 64 映像
- 对下载的 S3 映像的 URI 进行编码
- 如何通过右键单击另存为方法下载图像时自动重命名远程映像名称
- Base64映像下载:损坏的文件
- 内存泄漏-定期下载映像
- React Native:从Firebase Storage下载映像
- 下载 base64 编码映像 IE9