如何解决在上传到GCP存储或使用bucket.getFiles
我一直在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)
的使用,并且在promise resolve之后可以安全地向用户返回可用链接列表。
问题
我没有将文件名存储在数据库的deliveryNote表中。依靠GCP知道一次交货的附件,这听起来可能有点问题。我看到的方式是,我不需要在数据库中复制信息(也可以在两个地方处理故障),如果我需要这些文件,我会向GCP询问以提供它们的链接。相反的想法是,存储名称,您将能够为客户端列出附件,然后在用户单击特定附件时生成下载链接。
我的问题是:直接使用bucket.getFiles()是否有问题(从服务器),而不是将每个文件名存储在我的数据库中,然后一一询问并将其返回给客户端? / p>
可能会影响所选方法的一些点:
- 每次通话的GCP费用差异?
- 无效的应用程序数据结构?
- 其他东西吗?
解决方法
使用此方法返回要下载的文件的链接没有问题。在此方法的API文档(可访问here)中,它们甚至还显示了使用前缀返回文件的示例。您只需要了解Cloud Storage实际上并不使用真实文件夹,而仅使用看起来像它们在文件夹中的名称-在这种情况下,here会提供更多详细信息-因此您在使用名称时不会混淆概念和前缀。
对于定价点,您可以在this documentation中获得Google Cloud Storage的整体价格,包括每个操作将要花费的费用-例如,获取对象的每50000个操作将花费0.02美元,检索存储桶和对象元数据-存储数据等。检查之后,您也可以与数据库成本进行比较,以检查这一点是否会影响您。
总而言之,您没有问题可以遵循。将名称存储在数据库中的优点是,即使您可能在两处都遇到故障,但您更有可能仅在一个地方遇到问题,因此复制将是一件很棒的事情。因此,您只需要确定最适合您的一个即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。