首页 > 解决方案 > 在 Nodejs 中使用 Unirest 将图像保存到文件

问题描述

我正在尝试使用 Unirest 下载图像,但保存后图像已损坏

const downloadChapterPage = async (url, pageName) => {
    return new Promise(async (resolve) => {
        unirest.get(url)
            .end(async (res) => {
                if (res.error) {
                    console.log("Error when downloading page : " + pageName, " ", res.error)
                    resolve();
                }
                fs.writeFileSync(pageName + '.jpg', res.raw_body);
                resolve();
            });
    });
}

downloadChapterPage('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', 'page1');

我也是这样起诉的,但它也不起作用

const downloadChapterPage = async (url, pageName) => {
    return new Promise(async (resolve) => {
        unirest.get(url)
            .end(async (res) => {
                if (res.error) {
                    console.log("Error when downloading page : " + pageName, " ", res.error)
                    resolve();
                }
                const data = Buffer.from(res.raw_body);
                fs.writeFileSync(pageName + '.jpg', data, 'binary');
                resolve();
            });
    });
}
downloadChapterPage('https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png', 'page1');

标签: node.jsunirest

解决方案


这个改装怎么样?

修改点:

  • 我认为编码可能是您的问题的原因。所以请添加encoding(null)到请求中。
  • 此图像的 mimeTypehttps://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.pngimage/png.

修改后的脚本:

const downloadChapterPage = async (url, pageName) => {
    return new Promise(async (resolve) => {
        unirest.get(url)
            .encoding(null) // Added
            .end(async (res) => {
                if (res.error) {
                    console.log("Error when downloading page : " + pageName, " ", res.error)
                    resolve();
                }
                const data = Buffer.from(res.raw_body);
                fs.writeFileSync(pageName + '.png', data, 'binary'); // Modified or fs.writeFileSync(pageName + '.png', data);
                resolve();
            });
    });
}

参考:


推荐阅读