我使用mongoDB和node.js真的很新,我试图限制服务器中每个文件的下载数量。我正在使用gridfs将文件存储在数据库中,并在生成了能够下载文件的链接后,我需要限制每个文件的下载次数,但不知道如何做。
最佳答案
假设您使用express作为您的node.js http服务器,则可以执行以下操作:
const app = require('express')();
const bucket = new mongodb.GridFSBucket(db, {
chunkSizeBytes: 1024,
bucketName: 'songs'
});
const downloads = {};
const fileURI = '/somefile.mp3';
const maxDownload = 100;
app.get(fileURI, function(req, res) {
if (downloads[fileURI] <= maxDownload) {
// pipe the file to res
return bucket.openDownloadStreamByName('somefile.mp3').
.pipe(res)
.on('error', function(error) {
console.error(error);
})
.on('finish', function() {
console.log('done!');
downloads[fileURI] = downloads[fileURI] || 0;
downloads[fileURI]++;
});
}
return res.status(400).send({ message: 'download limit reached' });
});
app.listen(8080);