从CouchDB发送附件文件给用户?

时间:2014-01-01 09:13:23

标签: node.js express couchdb cradle

我是CouchDB的新手,最近我使用Express创建了下载门户。我想确保只有授权用户才能下载,所以我在app.js中创建检查程序(使用express),如下所示:

app.get("/download/:id/:file", function (req, res) {
   var filename = req.params.file;
   var docI= req.params.id;
   if(userHasPrivileges()){
       db.getAttachment(publicationID, filename, function(err, reply){
           // WHAT SHOULD I DO HERE ?
       })
   }
}

问题是我无法让cradle.io(https://github.com/cloudhead/cradle#creatingupdating-documents)将文件直接发送给用户。我不想使用数据库中的直接链接,因为它会使未经授权的用户能够下载文件。问题是:我真的不知道如何将我刚从getAttachment()方法获取的文件发送到用户的浏览器。

寻求帮助

1 个答案:

答案 0 :(得分:3)

在couchdb中,db.getAttachment返回Stream,因此您可以将该流传输到http响应对象:

getAttachment().pipe(httpResponseObject)  

完整代码:

app.get("/download/:id/:file", function (req, res) {
   var filename = req.params.file;
   var docI= req.params.id;
   if(userHasPrivileges()){
       res.attachment(filename);
       db.getAttachment(publicationID, filename, function(err){ }).pipe(res);
   }
}

如果您的附件是大数据,如大图片,mp3或视频,则应支持范围下载。标题中的范围可以允许浏览器下载/重新下载他们需要的部分。

Nodejs - HTTP Range support / Partial file download