【问题标题】:How can I download and save a file using JavaScript (no browser) [duplicate]如何使用 JavaScript(无浏览器)下载和保存文件 [重复]
【发布时间】:2021-05-07 03:03:10
【问题描述】:

所以我使用 node.js 来使用“node test.js”运行一些 JavaScript,并希望从给定的 URL 中保存一个文件,但是每当我搜索下载文件时(如预期的那样)我只是找到信息关于如何触发浏览器下载。我正在努力弄清楚如何去做。非常感谢任何帮助。

谢谢,格伦 x

const fetch = require('node-fetch');
const fs = require('fs');

fetch("https://lex-audio.useremarkable.com/mp3/viscera_gb_1.mp3").then(res => res.text()).then(
    txt => {
        fs.writeFile('src/assets/audio.mp3', txt, err => {
            if (err) {
                console.log(err);
            }
        } );
    }

);

【问题讨论】:

  • 运行问题中包含的代码时会发生什么?
  • 我只是得到一个不播放任何东西的文件,不知道为什么。
  • @Link19 文件包含数据还是为空?问题可能是写入文件的数据。
  • 它不是空的,但我无法读取 mp3 文件。虽然当我将它与下载进行比较时,它看起来确实非常相似,但文件的开头看起来不同。不幸的是,我对音频文件编码一无所知,我什至不确定这是下载文件的正确方法吗?

标签: javascript node.js


【解决方案1】:

node-fetch 肯定适用于下载 http 资源,例如 MP3 文件。

但是,MP3 数据不是 UTF-8 文本,因此您需要将下载视为二进制。将res.text() 替换为res.buffer()。此更改适用于我,我可以播放下载的音频文件:

const fetch = require('node-fetch');
const fs = require('fs');

const url = "https://lex-audio.useremarkable.com/mp3/viscera_gb_1.mp3";

fetch(url).then(res => res.buffer()).then(buffer => {
    return fs.promises.writeFile('audio.mp3', buffer);
}).then(() => {
    console.log("done");
}).catch(err => {
    console.log(err);
});

请注意,由于我们已经在 fetch() 中使用了 Promise,因此我使用了 writeFile 的 Promise 版本,因为两者的错误处理和成功跟踪以这种方式更清晰地集成在一起。

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 2021-11-07
    • 2011-11-04
    • 2016-07-15
    • 2016-05-20
    • 2010-10-18
    • 2010-09-12
    相关资源
    最近更新 更多