gpt4 book ai didi

image - Node.js 将 http.ClientRequest 管道传输到带有二进制文件的 fs.createWriteStream 会导致文件损坏/膨胀

转载 作者:搜寻专家 更新时间:2023-10-31 22:32:33 34 4
gpt4 key购买 nike

我正在处理的 Node.js (v0.4.12) 模块出现了一个奇怪的问题。它是一个 CouchDB 模块,虽然我很确定 CouchDB 不是这里的问题,但我将把它包括在内,因为它可能是有用的信息。

无论如何,我正在编写一个用于使用 CouchDB 上传和下载附件的包装器。我的上传部分工作得很好,这是我遇到困难的下载部分。

我的测试过程是这样的:

  1. 上传图片文件(http.requestfs.createReadStream)
  2. 下载文件 ( http.request )
  3. 将下载的文件保存到不同位置以进行比较/损坏检查(fs.createWriteStreamstream.pipe)

这适用于纯文本文件,但像图像这样的二进制文件表现不同。

正如我之前提到的,上传似乎没有问题。因为我可以访问 CouchDB 中的 URL 并查看图像。 (大小匹配并呈现我上传的图像)当我使用我的模块下载文件并保存时,输出文件比源文件大(大 50-100%)并且无法被任何图像打开编辑。 (因此,它以某种方式“损坏”了)

当谈到二进制文件时,我是否遗漏了有关 Streams 的某些信息?我已经尝试将两边的 encoding 更改为 "binary""base64",但输出文件仍然比之前大 50%来源。在我发现编码选项之前,它被设置为 “utf8”,输出文件大了 100%,所以我认为这是某个地方的编码问题。

我也尝试过手动管道流(而不是使用 pipe 方法本身),但结果是一样的。

最佳答案

对不起,如果我把这个问题弄错了,但看起来你是尝试对二进制文件使用编码。你不需要to: 默认情况下,node 为您提供带有二进制数据的原始缓冲区。

这是我下载 clown 的例子:

var http = require("http"),
fs = require("fs");

http.get({
host: "2.bp.blogspot.com",
path: "/_IR8qT_UKjOI/TT2P3qleU9I/AAAAAAAAA3I/beckWSLh3nk/s1600/clown.jpg" },
function(res) {
var stream = fs.createWriteStream("clown.jpg");
res.pipe(stream);
});

希望对您有所帮助。

关于image - Node.js 将 http.ClientRequest 管道传输到带有二进制文件的 fs.createWriteStream 会导致文件损坏/膨胀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7654523/

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