我一直在搜索StackOverflow,但似乎尚未有人问过这个问题。这是关于将文件上传到GCP存储的架构问题。
TL; DR:直接使用bucket.getFiles()(从服务器)是否有任何问题,而不是将每个文件名存储在我的数据库中,然后一一询问并将其返回给客户端?
情况:
我正在开发一项功能,该功能将允许用户上传链接到交货单的图像附件。该送货单可以有多个附件。
我在客户端(移动设备)上使用了一个简单的上传按钮,然后将内容保存在GCP中的path/to/id-deliveryNote
文件夹中,例如:path/to/id-deliveryNote/filename.jpg
path/to/id-deliveryNote/filename2.jpg
etc…
在应用程序的其他位置,用户应该能够单击并下载每个附件。
解决方案
在GCP中完成上传后,我问自己如何读取这些文件,并为用户提供该文件的下载链接。那是我找到了:bucket.getFiles()
函数的时间。
由于我的文件路径都在同一个id-deliveryNote/
前缀之下,因此我可以利用bucket.getFiles(prefix)
诺言解析的使用,在诺言解析可以安全地将可用链接列表返回给我的用户之后。
问题
我没有将文件名存储在数据库的deliveryNote表中。依靠GCP知道一次交货的附件,这听起来可能有点问题。我看到的方式是,我不需要在数据库中复制信息(也可以在两个地方处理故障),如果我需要这些文件,我会向GCP询问以提供它们的链接。相反的想法是,存储名称,您将能够为客户端列出附件,然后在用户单击特定附件时生成下载链接。
我的问题是:直接使用bucket.getFiles()(从服务器)是否有任何问题,而不是将每个文件名存储在我的数据库中,然后一一询问并将其返回给客户端?
可能会影响所选方法的几点:
使用此方法返回要下载的文件的链接没有问题。在此方法的API文档(可在此处访问)中,它们甚至还显示了使用前缀返回文件的示例。您只需要注意Cloud Storage实际上并不使用真实文件夹,而仅使用看起来像它们在文件夹中的名称-在这种情况下,此处提供了更多详细信息-因此,在使用名称和前缀时,您不会混淆概念。
对于定价点,您可以在本文档中获得Google Cloud Storage的整体价格,包括每个操作的成本-例如,对于获取对象,检索存储桶和对象元数据的每50000个操作,您将花费0.02 USD数据等。检查之后,您还可以与数据库成本进行比较,以检查这是否会影响您。
总而言之,您没有问题可以遵循。将名称存储在数据库中的优点是,即使您可能在两处都遇到故障,但您更有可能仅在一个地方遇到问题,因此复制将是一件很棒的事情。因此,您只需要决定哪一个最适合您。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句