var ultUrls = [{
url: 'https://i.redd.it/kl44uq60z4631.png',
name: 'pics/A bison in steam during winter at Yellowstone National Park.png'
}, {
url: 'https://i.redd.it/9eocp20xr6631.jpg',
name: 'pics/Athens at night.jpg'
}, {
url: 'https://i.redd.it/0gezn9zjr6631.jpg',
name: 'pics/This is Rayne. Her favorite color is orange. Her job is a clown for the circus. Her motto is *honk honk*..jpg'
}, {
url: 'https://i.redd.it/fxcivargr6631.png',
name: 'pics/Reddit your input is greatly appreciated.png'
}, {
url: 'https://i.redd.it/xzpukskhr6631.jpg',
name: 'pics/Cranberry lake Ontario.jpg'
}, {
url: 'https://i.redd.it/4mplt3joh5631.jpg',
name: 'pics/Pics of insects are the best.jpg'
}, {
url: 'https://i.redd.it/03q4c5ndq6631.jpg',
name: 'pics/Elvis Presley during his service in the U.S. Army.jpg'
}]
While downloading files in this array I'm getting ENONENT:no such file or directory, open ...
var downloadImages = function(callback) {
ultUrls.forEach( function(str) {
download_file_httpget(str.url, str.name, function(){console.log('Finished Downloading' + filename)});
});
}
var download_file_httpget = function(url, dest, callback){
request.get(url)
.on('error', function(err) {console.log(err)} )
.pipe(fs.createWriteStream(dest))
.on('close', callback);
};
Tried with destination
var download_file_httpget = function(url, dest, callback){
let destn = 'C:\\Users\\Downloads\\' + dest;
request.get(url)
.on('error', function(err) {console.log(err)} )
.pipe(fs.createWriteStream(destn))
.on('close', callback);
};
UnCaught Exception: Error:ENONENT: no such file or directory, open 'C:\\Users\\Downloads\\pics\\A bison in steam during winter at Yellowstone National Park.png
Just change the name attribute of each image by removing 'pics/'. It will work.
Here is the final code:
const request = require('request');
const fs = require('fs');
var ultUrls = [ { url: 'https://i.redd.it/kl44uq60z4631.png', name: 'A bison in steam during winter at Yellowstone National Park.png' }, { url: 'https://i.redd.it/9eocp20xr6631.jpg', name: 'Athens at night.jpg' }, { url: 'https://i.redd.it/0gezn9zjr6631.jpg', name: 'This is Rayne. Her favorite color is orange. Her job is a clown for the circus. Her motto is honk honk..jpg' }, { url: 'https://i.redd.it/fxcivargr6631.png', name: 'Reddit your input is greatly appreciated.png' }, { url: 'https://i.redd.it/xzpukskhr6631.jpg', name: 'Cranberry lake Ontario.jpg' }, { url: 'https://i.redd.it/4mplt3joh5631.jpg', name: 'Pics of insects are the best.jpg' }, { url: 'https://i.redd.it/03q4c5ndq6631.jpg', name: 'Elvis Presley during his service in the U.S. Army.jpg' } ]
var downloadImages = function(callback) {
ultUrls.forEach( function(str) {
download_file_httpget(str.url, str.name, function(){console.log('Finished Downloading' + str.name)});
});
}
var download_file_httpget = function(url, dest, callback){
let destn = 'C:\\Users\\Downloads\\pics\\' + dest;
request.get(url)
.on('error', function(err) {console.log(err)} )
.pipe(fs.createWriteStream(destn))
.on('close', callback);
};
downloadImages();
As pointed out by @hoangdv create a pics folder and also remove 'pics/'
from str.name that is being passed to download_file_httpget
This complete example works correctly, provided that you create a folder called pics
.
You'll need to install the request module first too.
npm install request --save
I didn't change much except:
ultUrls
declaration + filename
with + str.name
because filename
was undefined. Here's the code:
const request = require('request');
const fs = require('fs');
var ultUrls = [
{ url: 'https://i.redd.it/kl44uq60z4631.png', name: 'pics/A bison in steam during winter at Yellowstone National Park.png' },
{ url: 'https://i.redd.it/9eocp20xr6631.jpg', name: 'pics/Athens at night.jpg' },
{ url: 'https://i.redd.it/0gezn9zjr6631.jpg', name: 'pics/This is Rayne. Her favorite color is orange. Her job is a clown for the circus. Her motto is honk honk..jpg' },
{ url: 'https://i.redd.it/fxcivargr6631.png', name: 'pics/Reddit your input is greatly appreciated.png' },
{ url: 'https://i.redd.it/xzpukskhr6631.jpg', name: 'pics/Cranberry lake Ontario.jpg' },
{ url: 'https://i.redd.it/4mplt3joh5631.jpg', name: 'pics/Pics of insects are the best.jpg' },
{ url: 'https://i.redd.it/03q4c5ndq6631.jpg', name: 'pics/Elvis Presley during his service in the U.S. Army.jpg' }
];
var downloadImages = function (callback) {
ultUrls.forEach(function (str) {
download_file_httpget(str.url, str.name, function () { console.log('Finished Downloading' + str.name) });
});
}
var download_file_httpget = function (url, dest, callback) {
request.get(url)
.on('error', function (err) { console.log(err) })
.pipe(fs.createWriteStream(dest))
.on('close', callback);
};
downloadImages();
I solved the issue by removing '/pics' from the url.
var ultUrls = [{
url: 'https://i.redd.it/kl44uq60z4631.png',
name: 'A bison in steam during winter at Yellowstone National Park.png'
}, {
url: 'https://i.redd.it/9eocp20xr6631.jpg',
name: 'Athens at night.jpg'
}, {
url: 'https://i.redd.it/0gezn9zjr6631.jpg',
name: 'This is Rayne. Her favorite color is orange. Her job is a clown for the circus. Her motto is *honk honk*..jpg'
}, {
url: 'https://i.redd.it/fxcivargr6631.png',
name: 'pics/Reddit your input is greatly appreciated.png'
}, {
url: 'https://i.redd.it/xzpukskhr6631.jpg',
name: 'Cranberry lake Ontario.jpg'
}, {
url: 'https://i.redd.it/4mplt3joh5631.jpg',
name: 'Pics of insects are the best.jpg'
}, {
url: 'https://i.redd.it/03q4c5ndq6631.jpg',
name: 'Elvis Presley during his service in the U.S. Army.jpg'
}]
Then used promise like so
Promise.each(ultUrls, url=> new Promise((resolve, reject) => {
console.log('Downloading Image: ' + url.file_name);
request(url.url).on('error', reject).pipe(fs.createWriteStream(path.join(__dirname, url.file_name))).on('finish', () => {
console.log('Downloaded Image: ' + url.file_name);
resolve();
});
})).then(() => {
console.log('All Image Downloaded!');
}).catch(err => {
console.error('Failed: ' + err.message);
});
Reference: https://stackoverflow.com/a/36666258/7599905
这是因为您之前没有创建过pics
目录
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.