如何从node.js服务器发送二进制数据作为响应

我是mongodb的新手。

我用下面的代码片段存储二进制数据:

var data = fs.readFileSync(path); var image = new mongodb.Binary(data); //open connection/collection var record = {picname: id, content: image }; collection.save(record, {safe: true}, function(err,result){ if(err) console.log(err.stack); });//save 

我可以在db中看到logging大小。 有二进制数据。 logging大小也与文件大小相匹配。 很高兴。

现在,从mongo中获取相同的二进制数据,然后尝试发送它作为响应:

 var record = {picname: id}; collection.findOne(record, function(err,result){ if(err) console.log(err.stack); else { console.log('before read from db for download.'); //HOW TO READ IMAGE/BINARY DATA FROM RESULT? //I need to send result in response. Any Idea? console.log('before read from db for download'); } }); 

我使用下面的代码段发送二进制数据。 它不适用于所有的文件。 可能是什么问题:

 collection.findOne(record, function(err,result){ if(err) console.log(err.stack); else { console.log('before read from db for download. result: [' + result.picname + " ], type: " + result.imagetype); res.end(result.content.buffer, "binary"); console.log('Responded SUCCESS: ' + id ); } });//findOne 

请让我知道如何检索并通过回复发送。

在此先感谢DD。

这里的问题与存储和读取数据没有多大关系,而是关于内容types。 因此,理想情况下,您希望将此数据与您的数据一起存储,并在发送响应时返回正确的标题信息。

所以这部分将是MIMEtypes检测。 有可用的模块, mmmagic是其中之一

 var Magic = require('mmmagic').Magic; var magic = new Magic(); var data = fs.readFileSync(path); var image = new mongodb.Binary(data); //open connection/collection magic.detect(data,function(err,result) { var record = {picname: id, content: image, mimeType: result }; collection.save(record, {safe: true}, function(err,result){ if(err) console.log(err.stack); });//save }); 

写入标题的方法各不相同,但是您所调用的节点的基本“http”如下所示:

 var record = {picname: id}; collection.findOne(record, function(err,result){ if(err) console.log(err.stack); else { res.writeHead(200, { 'Content-Type': result.mimeType, 'Content-Length': result.content.length }); res.write(result.content.buffer); res.end(); } }); 

那么这里有效地返回的是由它的正确的mimetypes标识的二进制数据。 所以你可以通过一个URL来访问它,你可以直接在浏览器中查看文档和视图,就好像它是一个普通的图像文件一样。