【发布时间】:2016-10-16 23:14:27
【问题描述】:
我正在做一个项目,在该项目中创建一些 url,然后从这些 url 获取图像。
例如我有一个数组对象urls
['abc.com/01.jpg',
'abc.com/01.jpg',
.......
]
诸如此类的网址..
我要做的是从这些网址获取图像并尝试通过此代码保存它们
download = (uri, filename, callback) ->
request.head uri, (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
return
return
但它不能正常工作。任何人对从 nodeJS 项目中的 url 下载图像有一些好的想法?
或者可能不是在本地保存它们而是在从 url 获取后将它们上传到 Dropbox?
我从上面的代码中得到了这个错误
throw er; // Unhandled stream error in pipe.
^
Error: EMFILE: too many open files, open 'C:\Users\Administrator\Desktop\graby\image.jpg'
at Error (native)
[nodemon] app crashed - waiting for file changes before starting...
【问题讨论】:
-
因为 javascript 是异步的,所以您刚刚要求您的脚本同时下载 100 万张 jpg 文件。理想情况下,您可能希望同时下载 10 个文件。您可能想要测试的确切数字。因为即使可以处理太多也会导致所谓的颠簸,这会减慢速度而不是加快速度。
-
您建议的最佳方法是什么?
-
只保留活动连接的计数,。因此,您首先可能会启动 10 个连接,每次连接完成时,启动下一个。
-
我们不能让系统暂停一段时间吗?当它下载一个图像然后暂停等等?
-
暂停在这里无济于事。理想情况下,您肯定希望这件事尽可能快地进行。下载 10 个或更多文件,如果您下载的网站具有高延迟不应导致 Node 出现任何问题。
标签: javascript node.js jpeg