Javascript nodejs木偶演员无法下载URL中带有特殊字符的图像文件

Javascript nodejs木偶演员无法下载URL中带有特殊字符的图像文件,javascript,node.js,https,puppeteer,Javascript,Node.js,Https,Puppeteer,我想在本地计算机上下载两个图像: 正如您可以在其urlö中将第一个图像视为一个特殊字符,但它仍然是您可以在线访问的有效url 我尝试使用我制作的node.js puppeter(版本“5.5.0”)脚本下载这两个图像,它尝试使用以下代码下载: function download(url, destination, cb) { return new Promise(async function (resolve, reject) { try { var file =

我想在本地计算机上下载两个图像:

正如您可以在其url
ö
中将第一个图像视为一个特殊字符,但它仍然是您可以在线访问的有效url

我尝试使用我制作的node.js puppeter(版本“5.5.0”)脚本下载这两个图像,它尝试使用以下代码下载:

function download(url, destination, cb) {
  return new Promise(async function (resolve, reject) {
    try {
      var file = fs.createWriteStream(destination);
      var request = https.get(url, function (response) {
        response.pipe(file);
        file.on('finish', function () {
          file.close(cb);  // close() is async, call cb after close completes.
          resolve(true)
        });
      });
    } catch (err) {
      console.log('err saving file:', err)
      reject()
    }
  });
}

async function debugDownload(){
  let broken_imgUrl='https://45football.com/assets/resources/1134/medium/1035-nöggi-subliga-cf.jpg';
  let broken_imgSavePath='/home/martin/Documents/projects/broken.jpg';
  download(broken_imgUrl, broken_imgSavePath, function (x) { console.log('img download done'); });

  let good_imgUrl='https://45football.com/assets/resources/675/medium/580-maritimo-cf.jpg'
  let good_imgSavePath='/home/martin/Documents/projects/good.jpg';
  await download(good_imgUrl, good_imgSavePath, function (x) { console.log('img download done'); });
}
运行
debugDownload()
后,文件
good.jpg
下载良好,但
已损坏。jpg
只有707个字节,我无法打开它,这让我觉得我的下载功能有问题,它不适用于带有特殊字符的URL


问题是早期版本的nodejs默认没有encodeURI,因此我们得到了一个404notfound。只需添加encodeURI(url)


我不知道您使用的是哪个版本的节点。

我通过使用特殊字符对url进行uri编码解决了这个问题,就是这样

function download(url, destination, cb) {
    return new Promise(async function (resolve, reject) {
      try {
        var file = fs.createWriteStream(destination);
        var request = https.get(encodeURI(url), function (response) { // modified
          response.pipe(file);
          file.on('finish', function () {
            file.close(cb);  // close() is async, call cb after close completes.
            resolve(true)
          });
        });
      } catch (err) {
        console.log('err saving file:', err)
        reject()
      }
    });
  }
  
  async function debugDownload(){
    let broken_imgUrl='https://45football.com/assets/resources/1134/medium/1035-nöggi-subliga-cf.jpg';
    let broken_imgSavePath='/home/martin/Documents/projects/broken.jpg';
    download(broken_imgUrl, broken_imgSavePath, function (x) { console.log('img download done'); });
  
    let good_imgUrl='https://45football.com/assets/resources/675/medium/580-maritimo-cf.jpg'
    let good_imgSavePath='/home/martin/Documents/projects/good.jpg';
    await download(good_imgUrl, good_imgSavePath, function (x) { console.log('img download done'); });
  }