我正在研究一个Node.js(v0.4.12)模块的奇怪问题。这是一个CouchDB模块,虽然我很确定CouchDB在这里不是问题,但我会把它包括在内,因为它可能是有用的信息。
无论如何,我正在编写一个使用CouchDB上传和下载附件的包装器。我上传部分工作得非常好,这是我遇到困难的下载部分。
我的测试过程是:
http.request
,fs.createReadStream
)http.request
)fs.createWriteStream
,stream.pipe
)这适用于纯文本文件,但二进制文件(如图片)的行为方式不同。
正如我之前提到的,上传似乎很好。我可以访问CouchDB中的URL并查看图像。 (大小匹配,它呈现我上传的图像)当我使用我的模块下载文件并保存它时,输出文件比源文件大(50-100%更大),它不能被任何图像打开编辑。 (因此,它以某种方式“腐败”)
在二进制文件方面,我是否遗漏了一些关于Streams的内容?我尝试将两边的encoding
更改为"binary"
和"base64"
,但输出文件仍然比源大50%。在我发现编码选项之前,它被设置为"utf8"
,并且输出文件大了100%,这使我认为这是一个编码问题。
我也试过手动管道流(而不是使用pipe
方法本身),但结果是一样的。
答案 0 :(得分:6)
很抱歉,如果我的问题出错了,但似乎你错了 试图使用二进制文件编码。你不需要 to:node默认为您提供带二进制数据的原始缓冲区。
以下是我下载小丑的一个例子:
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);
});
我希望这会有所帮助。
答案 1 :(得分:0)
检查: https://github.com/joyent/node/issues/1569
Node不喜欢http中的换行符。更新您的节点。
如果您正在寻找couchdb,我可以在我的博客writings.nunojob.com上找到关于这个主题的博客文章。使用nano通常是沙发客户端的好选择