我正在使用Mongo架构发布表单。适用于所有字符串,但现在我正在尝试上传文件。我应该指定架构中的文件是什么类型的字段?
//create model/schema
const TrackSchema = new Schema({
title:{
type: String,
required: true
},
length:{
type: String,
required: true
},
available:{
type: Boolean,
required: true
},
image:{
type: String,
required: true
},
date: {
type: Date,
default: Date.now
},
source: {
type: **??,
required: true
}
})
我应该制作什么类型的"源"字段,它将是来自表单的文件
这实际上取决于您的用例——特别是您正在处理的约束。
我可以想出两种方法:
- 将其存储为
type: Buffer
- 将其作为
type: String
存储在base64
中
就空间/速度而言,将其存储为Buffer
可能是最有效的存储方式。它还为您提供了将其转换为用例所需的任何类型的灵活性。
当您需要访问它进行下载时,将其存储为String
将使您更容易控制文件内容,因为您不需要从Buffer
转换为base64
。
就我个人而言,我喜欢将文件存储为Buffer
,并添加其他必要的字段,如filename
和mimetype
,这将产生以下结果:
source: {
file: { type: Buffer, required: true },
filename: { type: String, required: true },
mimetype: { type: String, required: true }
}
但这也适用于我的用例。
还有第三种选择,即在mongo中使用GridFS
存储它,以防您的文件超过16MB的文件大小。你可以在他们的官方文档页面上阅读更多关于这方面的信息:https://docs.mongodb.com/manual/core/gridfs/
通常,您将文件数据存储到数据库中(如果您存储的是文件)。
有多种方法可以存储文件数据。
-
您的文件大小小于16 MB。您可以将数据直接存储到缓冲区中的集合(二进制数据)。
source : { data: Buffer, contentType: String }
-
如果文件大小超过16MB,则可以使用GridFS。
- 您将文件存储在磁盘上,然后只存储mongodb集合的路径。在这种情况下,类型将只是字符串