我是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()方法获取的文件发送到用户的浏览器。
寻求帮助
答案 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或视频,则应支持范围下载。标题中的范围可以允许浏览器下载/重新下载他们需要的部分。