gpt4 book ai didi

javascript - 如何以正确的格式将文件写入 mpeg 电影文件到磁盘?

转载 作者:行者123 更新时间:2023-12-01 01:07:05 25 4
gpt4 key购买 nike

我正在尝试下载外部 ts (mpeg) 文件并将其写入磁盘,但我无法理解如何正确格式化文件内容。

我在磁盘上获取了该文件,但它无法在媒体播放器中播放,并且当我查看文件的属性时,它不会像 ts 文件通常那样显示任何视频/声音信息。我已经尝试了许多不同的编码,如果这是问题的根源,或者如果我需要以某种方式指示 contentType、写入文件属性或我在这里缺少的内容,我什至不支持。

写入无法播放文件的代码:

getFile = (url) => {
https.get(url, r => {
let rawData = [];

r.on("data", chunk => {
rawData += chunk;
});

r.on("end", () => {
fs.writeFile(`./resources/test.ts`, rawData, "utf-8", err => {
if (err) {
console.log(`error writing file`);
return;
}

console.log(`Wrote successfully`);
});
});
});
};

这对我来说是一个全新的领域。我习惯于提供文件并设置各种内容类型,而不是下载它们。非常感谢帮助!

最佳答案

UTF-8 编码将填充具有最高有效位设置的字节,这会损坏二进制文件。您可以通过调用 res.pipe() 将其保存到磁盘,而无需缓冲所有数据。到 Writablefs.createWriteStream() 创建的流:

getFile = url =>
https.get(url, res => {
res.pipe(fs.createWriteStream('./resources/test.ts', 'binary'))
.on('error', console.error)
.on('finish', () => { console.log('wrote successfully') })
})

如果您希望调用者能够知道下载何时完成以及是否出现错误,您可以将返回值包装在 Promise 中。并使用stream.finished() :

const { finished } = require('stream')
const getFile = url => new Promise((resolve, reject) => {
https.get(url, res => {
const stream = res.pipe(
fs.createWriteStream('./resources/test.ts', 'binary')
)

finished(stream, err => {
if (err) reject(err)
else resolve()
})
})
})

// usage
getFile('some url').then(() => {
console.log('wrote successfully')
}, error => {
console.error(error)
})

关于javascript - 如何以正确的格式将文件写入 mpeg 电影文件到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55522241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com