2011-08-15 39 views
18

我试图在Node.JS中使用base64对图像进行编码以作为附件传递给PostageApp API。我认为我有它的工作,但它附有一个1K文件,这不是我正在寻找的。Node.JS - 使用缓冲区对base64中的图像进行编码使用缓冲区

这里是我的代码:

var base64data; 

fs.readFile(attachment, function(err, data) { 
    base64data = new Buffer(data).toString('base64'); 
}); 

而这里的API调用,我想提出的部分:

attachments: { 
    "attachment.txt" : { 
    content_type: "application/octet-stream", 
    content: base64data 
    }, 
} 

我有点失落,不是与节点如此之大,但我认为它会奏效。任何帮助,将不胜感激!

+0

@Jim Schubert,那个建议是错误的和不好的。首先,readFile读取整个文件,而不是块。其次,阻止代码会阻止整个服务器,愚蠢的想法。 – thejh

回答

36
fs.readFile(attachment, function(err, data) { 
    var base64data = new Buffer(data).toString('base64'); 
    [your API call here] 
}); 

这需要一些时间,直到结果都在那里,所以你的时间已经得到了数据,外范围的执行已经结束。

+0

不幸的是,我将'base64data'传递给了一个有效载荷,它本质上是一个JSON散列,然后我将它们发布到API服务器。这会比我在做什么更好吗? – JonLim

+0

@JonLim,这基本上是唯一的方法。您必须完成所有这些工作(“将base64数据传递到负载中,这实质上是一个JSON哈希,然后我将其发布到API服务器”)。 – thejh

+0

啊。没有别的办法吗?这很糟糕,因为附件参数是可选的,所以如果没有附件,它不会被包含。虽然谢谢! – JonLim

9

只需指定“base64”作为编码。 Per the docs

如果未指定编码,则返回原始缓冲区。

fs.readFile(attachment, {encoding: 'base64'}, function(err, base64data) { 
    [your API call here] 
}); 
+0

是不是为readFile编码附件的编码,而不是您想要编码的内容? – Sam

+1

在文档中, '虽然它是'createReadStream',编码可以是Buffer接受的任何一种。我试过@hyphenthis说过的,它工作。 – Kennyhyun