我应该如何在 NodeJS 中存储文件
How should I store files in NodeJS
- 我是 Nodejs 的新手,正在研究如何在 NodeJS 中使用 Multer 上传文件。我看到大部分教程都将各种文件(音频、头像照片、横幅照片、文本、PDF 等)存储在静态 "public" 文件夹中。
- 我的第一个问题:这是在后端存储文件的最佳方式吗?我应该为特定用户创建一个子文件夹来存储该用户的所有文件(例如:User1Folder、User2Folder)还是为某种类型的文件(例如:PDFFolder、AvatarFolder...)。
- 我的第二个问题:我应该像这样创建一个文件模型吗:
文件{
ID: ””,
姓名: ””,
上传日期:“”,
...
}
然后将其保存在数据库中。
- 静态 public 文件夹应该是您唯一公开的文件夹,因此在
感觉你做对了。
- 不,我会使用 AWS S3 等外部服务来存储用户资产。您决定的文件夹模式完全取决于您计划为用户存储的资产。哪种方式可以让您轻松调试、保持理智以及迁移到其他服务器的能力。您可以在服务器之间拆分用户吗?我会画出您期望的文件类型树,并考虑哪种模式在您的应用程序中最灵活。我会倾向于类型,因为有些文件的处理方式与其他文件不同。您也不希望来自非活动用户的数百个几乎为空的文件夹。
- 是的。还包括服务器上的文件路径,以便稍后重新使用。我还会考虑将文件的命名约定作为备份标识符。也许像 userid_date_avatar.jpg.
{
id: 12345,
path: "s3://app_name/users/assets/images/5543_01_31_2019_10_05_33_avatar.jpg",
uploaded: "01-31-2019_10:05:33"
}
公司选择针对文件存储优化的第 3 方或独立存储服务是很常见的。有些带有免费试用计划,如 aws-s3、Google 的 gcs、azure 和其他一些。
但如果真的涉及到我们自己服务中的文件存储,将所有文件放在同一个文件夹(平面文件目录)中并通过将文件附加到相应模型中来进行文件分类就可以了.
在数据中放入类似这样的内容:{ "username": "arege", "name": "Arle Greg", "profile_picture_file":"timestamp_somehash.png"}
对于第二个问题,如果您的服务通常需要记录所有上传文件类型的日期,那么最好有这种模型。但如果只是针对服务中的一小部分文件类型,则可以随文件一起写在相应的模型中link.
- 我是 Nodejs 的新手,正在研究如何在 NodeJS 中使用 Multer 上传文件。我看到大部分教程都将各种文件(音频、头像照片、横幅照片、文本、PDF 等)存储在静态 "public" 文件夹中。
- 我的第一个问题:这是在后端存储文件的最佳方式吗?我应该为特定用户创建一个子文件夹来存储该用户的所有文件(例如:User1Folder、User2Folder)还是为某种类型的文件(例如:PDFFolder、AvatarFolder...)。
- 我的第二个问题:我应该像这样创建一个文件模型吗: 文件{ ID: ””, 姓名: ””, 上传日期:“”, ... } 然后将其保存在数据库中。
- 静态 public 文件夹应该是您唯一公开的文件夹,因此在 感觉你做对了。
- 不,我会使用 AWS S3 等外部服务来存储用户资产。您决定的文件夹模式完全取决于您计划为用户存储的资产。哪种方式可以让您轻松调试、保持理智以及迁移到其他服务器的能力。您可以在服务器之间拆分用户吗?我会画出您期望的文件类型树,并考虑哪种模式在您的应用程序中最灵活。我会倾向于类型,因为有些文件的处理方式与其他文件不同。您也不希望来自非活动用户的数百个几乎为空的文件夹。
- 是的。还包括服务器上的文件路径,以便稍后重新使用。我还会考虑将文件的命名约定作为备份标识符。也许像 userid_date_avatar.jpg.
{
id: 12345,
path: "s3://app_name/users/assets/images/5543_01_31_2019_10_05_33_avatar.jpg",
uploaded: "01-31-2019_10:05:33"
}
公司选择针对文件存储优化的第 3 方或独立存储服务是很常见的。有些带有免费试用计划,如 aws-s3、Google 的 gcs、azure 和其他一些。
但如果真的涉及到我们自己服务中的文件存储,将所有文件放在同一个文件夹(平面文件目录)中并通过将文件附加到相应模型中来进行文件分类就可以了.
在数据中放入类似这样的内容:{ "username": "arege", "name": "Arle Greg", "profile_picture_file":"timestamp_somehash.png"}
对于第二个问题,如果您的服务通常需要记录所有上传文件类型的日期,那么最好有这种模型。但如果只是针对服务中的一小部分文件类型,则可以随文件一起写在相应的模型中link.