我正在使用 Mongo Schema 来发布表单。适用于所有字符串,但现在我正在尝试上传文件。我应该指定文件在架构中的字段类型是什么?
//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
}
})
Run Code Online (Sandbox Code Playgroud)
我应该将“源”字段设置为什么类型,该字段将是来自表单的文件
这实际上取决于您的用例——特别是您正在处理的约束。
我可以想到两种方法来做到这一点:
type: Buffer
.type: String
in base64
.Buffer
就空间/速度而言,将其存储为 a可能是最有效的存储方式。它还使您可以灵活地将其转换为您的用例所需的任何类型。
当您需要访问文件进行下载时,将其存储为 aString
将使您可以更轻松地控制文件内容,因为您不需要从 转换Buffer
为base64
.
就我个人而言,我喜欢将文件存储为 aBuffer
并添加其他必要的字段,例如filename
和 ,mimetype
这会产生类似的结果:
source: {
file: { type: Buffer, required: true },
filename: { type: String, required: true },
mimetype: { type: String, required: true }
}
Run Code Online (Sandbox Code Playgroud)
...但这也是特定于我的用例的。
GridFS
如果您的文件超过 16MB 文件大小,还有第三种选择将其存储在 mongo 中。您可以在他们的官方文档页面中阅读更多相关信息:https://docs.mongodb.com/manual/core/gridfs/
通常,您将文件数据存储到数据库中(如果您要存储文件)。
有多种方法可以存储文件数据。
您的文件大小小于 16 MB。您可以将数据直接存储到缓冲区中的集合(二进制数据)。
source : { data: Buffer, contentType: String }
Run Code Online (Sandbox Code Playgroud)如果文件大小超过16MB,您可以使用GridFS。
归档时间: |
|
查看次数: |
10389 次 |
最近记录: |