我应该如何在NodeJS中存储文件

时间:2019-01-31 04:19:23

标签: node.js mongodb express nodes file-management

  • 我是Nodejs的新手,正在研究如何在NodeJS中使用Multer上传文件。而且我看到那里的大多数教程都将所有类型的文件(音频,头像照片,横幅照片,文本,PDF,..)存储在一个静态的“公共”文件夹中。
  • 我的第一个问题:这是在后端存储文件的最佳方法吗?我应该为特定用户创建一个子文件夹来存储该用户的所有文件(例如:User1Folder,User2Folder)还是一种文件类型(例如:PDFFolder,AvatarFolder ..)。
  • 我的第二个问题:我应该创建一个像这样的文件模型: 文件{ ID: ””, 名称: ””, uploadDate:“”, ... } 然后将其保存在数据库中。

2 个答案:

答案 0 :(得分:0)

  • 静态公用文件夹应该是您唯一公开的文件夹,因此在 感觉你做对了。
  • 否,我将使用AWS S3之类的外部服务来存储用户资产。您决定使用的文件夹模式完全取决于您计划为用户存储哪些资产。哪种方式使您可以轻松调试,保持理智以及迁移到其他服务器的能力。您可以在服务器之间划分用户吗?我会画出您期望的文件类型树,并考虑哪种模式最适合您的应用程序。我倾向于类型,因为某些文件的处理方式与其他文件不同。您也不希望非活动用户拥有数百个几乎为空的文件夹。
  • 是的。还包括服务器上的文件路径,以备将来使用。我还将考虑将文件的命名约定作为备份标识符。也许像userid_date_avatar.jpg之类的东西。

....... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ........ mRootRef = FirebaseDatabase.getInstance().getReference(); ....... mRootRef.child("Chat").child(current_uid) .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { .........

答案 1 :(得分:0)

公司通常选择针对文件存储进行了优化的第三方或独立存储服务。一些带有免费试用版的计划,例如aws-s3,Google的gcs,azure和其他一些捆绑软件。

但是,如果确实涉及到我们自己的服务中的文件存储,那么将所有文件放在单个相同的文件夹(平面文件目录)中并通过将文件附加到相应的模型进行文件分类就足够了。 在数据中放入以下内容:{ "username": "arege", "name": "Arle Greg", "profile_picture_file":"timestamp_somehash.png"}

对于第二个问题,如果您的服务一般需要记录所有上载文件类型的日期,那么拥有这种模型是有好处的。但是,如果仅针对服务中文件类型的一小部分,则可以将其与文件链接一起写在相应的模型中。