在ExpressJS响应中解码base64文档

时间:2015-02-10 17:51:45

标签: node.js file express base64

我想将一些文档作为base64字符串存储在数据库中。然后,当使用HTTP请求这些文档时,我希望ExpressJS解码base64文档并返回它们。所以像这样:

app.get('/base64', function (req, res) {
    //pdf is my base64 encoded string that represents a document
    var buffer = new Buffer(pdf, 'base64');
    res.send(buffer);
});

代码只是为了让我知道我想要完成的事情。我需要使用流吗?如果是这样,我该怎么做?或者我应该将这些文档写入临时目录,然后提供文件?如果可能的话,跳过这一步会很高兴。谢谢!

更新:为了清楚起见,我希望这可以使用典型的HTTP请求。因此,用户将单击其浏览器中的链接,该链接将带他到一个从数据库返回文件的URL。似乎必须可能,Microsoft SharePoint将序列化文件存储在SQL数据库中并通过http请求返回这些文件,我不相信它会首先将所有这些文件写入临时位置。我感觉像nodejs流可能是答案,但我对流媒体不是很熟悉。

1 个答案:

答案 0 :(得分:1)

在将文件表示保存到DB之前,您只需使用带有base 64编码的toString方法:

var base64pdf = pdf.toString('base64');

从db获取base64文件表示后,使用缓冲区按如下方式将其转换回文件:

var decodedFile = new Buffer(base64pdf, 'base64');

有关缓冲区用法的更多信息,请访问此处 - NodeJS Buffer

至于如何从快速服务器向客户端发送缓冲区,Socket IO应解决此问题。 使用socket.emit - 将事件发送到由字符串名称标识的套接字。任何 可以包括其他参数。

  

支持所有数据结构,包括Buffer。 JavaScript的   函数无法序列化/反序列化。

var io = require('socket.io')();
io.on('connection', function(socket){
  socket.emit('an event', { some: 'data' });
});

socket.io website.

所需的文档