0

我是 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() 方法获得的文件发送到用户的浏览器。

谢谢帮助

4

1 回答 1

3

在 couchdb 中,db.getAttachment返回 a 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 范围支持/部分文件下载

于 2014-01-01T11:31:49.560 回答