Javascript 上传到GCP存储器或使用bucket.getFiles()后,将文件名保存在DB中

Javascript 上传到GCP存储器或使用bucket.getFiles()后,将文件名保存在DB中,javascript,node.js,google-cloud-platform,architecture,upload,Javascript,Node.js,Google Cloud Platform,Architecture,Upload,我一直在StackOverflow中搜索,但似乎这个问题还没有被提出。这是一个关于文件上传到GCP存储的架构问题 TL;DR:直接(从服务器)使用bucket.getFiles()而不是将每个文件名存储在我的数据库中,然后逐个请求并将数组返回给客户端,有什么问题吗 情况: 我正在开发一项功能,允许用户上传与送货单链接的图像附件。此送货单可以有多个附件 我在客户端(移动设备)上使用一个简单的上传按钮,将GCP中的内容上传到path/to/id deliveryNote文件夹中,例如:path/to

我一直在StackOverflow中搜索,但似乎这个问题还没有被提出。这是一个关于文件上传到GCP存储的架构问题

TL;DR:直接(从服务器)使用bucket.getFiles()而不是将每个文件名存储在我的数据库中,然后逐个请求并将数组返回给客户端,有什么问题吗

情况:

我正在开发一项功能,允许用户上传与送货单链接的图像附件。此送货单可以有多个附件

我在客户端(移动设备)上使用一个简单的上传按钮,将GCP中的内容上传到
path/to/id deliveryNote
文件夹中,例如:
path/to/id deliveryNote/filename.jpg
path/to/id deliveryNote/filename2.jpg

在应用程序的其他地方,用户应该能够单击并下载每个附件

解决方案

在GCP中完成上传后,我问自己如何读取这些文件,并为用户提供文件的下载链接。这时我找到了:
bucket.getFiles()
函数

由于我的文件路径都位于相同的
id deliveryNote/
前缀之下,因此我利用
bucket.getFiles(prefix)
的用法,在承诺解析后,可以安全地将可用链接列表返回给我的用户

问题

我不在数据库的deliveryNote表中存储文件名。这听起来有点问题,依赖GCP来了解一张送货单的附件。我的看法是,以我的方式,我不需要在数据库中复制信息(可能在两个位置处理故障),如果我需要这些文件,我会在GCP处请求GCP给我它们的链接。相反的想法是,存储名称,您将能够列出客户端的附件,然后在用户单击特定附件时生成下载链接

我的问题是:直接(从服务器)使用bucket.getFiles()是否存在问题,而不是将每个文件名存储在我的数据库中,然后逐个请求并将数组返回给客户端

可能影响所选方法的一些要点:

  • 每次呼叫差异的GCP成本
  • 无效的应用程序数据结构
  • 其他事情

使用此方法返回要下载的文件的链接没有问题。在该方法的API文档(可访问)中,它们甚至还显示了使用前缀返回文件的示例。您只需注意,云存储实际上不使用真正的文件夹,只使用看起来像文件夹中的名称—本例中有更多详细信息—这样在使用名称和前缀时就不会混淆概念

对于定价点,您可以在中获得Google云存储的全部定价,包括每个操作的成本-例如,对于对象获取、检索存储桶和对象元数据-存储数据等操作,每50000次操作的成本为0.02美元。检查后,您还可以与数据库成本进行比较,检查这一点是否会影响您

总而言之,遵循这一点对您来说没有问题。将名称存储在数据库中的好处是,实际上,即使您可能在两个位置出现故障,您也更有可能只在一个位置遇到问题,这样,复制将是一件非常棒的事情。所以,你只需要决定哪一个最适合你