用MongoDB保存文件上文件的最佳方法是什么?



我正在编写平均堆栈应用程序中间,我是初学者程序员。

用户必须能够将表单字段的某些字符串与文件一起提交一些字符串,该文件将是图像或PDF。

我看过Multer,然后我可以将文件与蒙古b中的表单数据一起存储。

我还在gridfs上找到了一些东西。

做这项工作的最好和最简单的方法是什么?

往常:这取决于....

在我正在从事的一个项目中,我们故意选择使用数据库存储文件。原因之一是通过引入文件管理要求来防止解决方案的其他安全性和配置工件。

现在,请注意,将文件存储在磁盘上的速度比将其存储在数据库中要快。但是,如果性能不是一个非常大的问题,将其存储在MongoDB中也是一个非常有效的选项(毕竟,这是一种使用二进制序列化作为其核心组件之一的NOSQL解决方案(。
您可以选择选择将文件存储在一个普通的集合中,或者在gridfs中。

作为经验法则:如果解决方案中的文件不超过16MB,则可以将其保存为普通集合中的文档(一部分(。如果它们大于16 MB,最好将它们保存在Gridfs中。

保存Gridfs时,您必须使用Chunck尺寸来寻找最佳性能。

可以在此处找到有关Gridfs的博客文章

过去,我在二进制 - 基于字符串的序列化和GRIDFS上的另一个答案中发布了一些内容
注意:该帖子在C#中,但这并不应该真正构成问题。<<<<<<<<<<<<<<<<<</p>

希望这会有所帮助,并祝福您的程序员技能。最好的学习方法是询问和实验(很多(。

出于明显的原因,您永远都不想将文件作为二进制数据保存为二进制数据您需要。

var path = require('path')
var multer = require('multer')
var storage = multer.diskStorage({
    destination: function(req, file, callback) {
        callback(null, './uploads')
    },
    filename: function(req, file, callback) {
        console.log(file)
        callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
    }
})
app.post('/api/file', function(req, res) {
    var upload = multer({
        storage: storage
    }).single('userFile')
    upload(req, res, function(err) {
        res.end('File is uploaded')
    })
})

您可以根据所需的要求和命名约定更改代码位。我建议您保留可预测的文件名,以便您甚至不需要将路径存储在db中,即用户ID 5文件将存储在/img/user/profile/5.jpg或类似的内容中。

,如果您有太多的文件,也可以尝试在云存储中存储文件。

相关内容

最新更新