最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用AWS S3在node.js应用程序中处理文件上传和存储

网站源码admin19浏览0评论

使用AWS S3在node.js应用程序中处理文件上传和存储

使用AWS S3在node.js应用程序中处理文件上传和存储

我正在忙于一个类似于ToDo的应用,我希望用户能够在任务中添加附件。

与代码相比,我在应用程序体系结构方面的工作更多。

对于我的前端,我正在使用Vuejs,将Nodejs作为后端,并将MongoDB用于我的数据库,我正考虑将其托管在Heroku上。我当时正在考虑使用AWS S3为我的任务存储附件。

我不确定是否应该通过Node服务器将文件上传到S3,还是应该通过预先签名的URL上传文件。另外,我不确定哪种方法是从S3下载附件的最佳方法,我以为预先签名的URL是执行此操作的最佳方法。

我的主要困惑是如何保留任务所有附件的索引。最好将与我的Task模型相关的索引存储在MongoDB中吗?还有关于应存储哪些元数据的约定?

最后,我想知道关于如何组织上传到S3的文件是否有任何约定。仅将文件保存在“任务”的数据库ID下可以吗?我应该完全更改文件名吗?

回答如下:

将附件存储在S3中。我建议您在S3中为附件添加一个单独的存储桶,并在名为附件的MongoDB集合中跟踪这些文件。

对于每个文件,请保留以下文档:

{
  "source_name" : "helloworld.txt"
  "s3_url" : "https://bucket-name.s3-eu-west-1.amazonaws/A591A6D40BF420404A011733CFB7B190D62C65BF0BCDA32B57B277D9AD9F146E"
  "sha256" : "A591A6D40BF420404A011733CFB7B190D62C65BF0BCDA32B57B277D9AD9F146E"
  "uploaded" : "Mon May 11 2020 13:40:28" #  Alway UTC time
  "size" : 12
}

source_name是已上传文件的名称。 s3_url是S3中的位置。这应该是一个非公开的存储桶。这是您生成的文件的sha256校验和。您还可以将其存储为单独的实体。最后,上传日期和大小(以字节为单位)。

为什么要去检查校验和的开销?您可以自动对文件进行重复数据删除,从而更安全,并且可以轻松检测集合中已有的已上传文件。

这意味着您可以按校验和查找文件并快速命名,并且将来可以添加其他区分符字段。

上传和下载应由您的应用程序管理。您将此文档的_id字段存储在任务文档中,以便可以快速检索附件。

最终优化是将此文档嵌入到您的Task文档中,并节省了其他集合的复杂性和开销。如果附件与任务的比率低,请执行此操作。

发布评论

评论列表(0)

  1. 暂无评论