这是我们的简单用例:用户 2 想要将用户 1 的文档复制到我们应用程序中他或她自己的存储库中。应该很简单吧?我们需要做的就是在 blobstore 中创建第二个相同的 blob,并返回我们可以与 user2 关联的 key 。我们一定在这里遗漏了一些东西。看来 App Engine blob store 的主要功能是处理从浏览器上传和下载到浏览器的 blob,而发起服务器端的简单复制操作并不是那么简单。
明显的解决方案似乎是在 java 中使用实验性文件 api,但没有爱。它一直有效,直到你的文件大小超过 MB 左右,然后它失败了,有点不可预测。当我们只需要在存储层中制作一个副本时,将其全部读入服务器层似乎也很愚蠢。此外,我们将实验性功能应用到生产环境中的可能性很小,尽管不是零。
关于我们环境的一些信息:该应用程序是用 Java 编写的,我们使用的是 blobstore,而不是云存储,并且现在致力于它。我们是一个小型部门团队,想证明 App Engine 是一个很好用的平台,但是这个平台让我们感到难过。 S3 使这变得非常简单,我们在这里是否遗漏了一些非常愚蠢的东西?
最佳答案
我们最终放弃了使用文件 api 制作 blob 的编程副本并按照 Kalle 在他的评论中建议的引用的想法,并创建了一个新的外部参照实体来存储有关副本和原始文件的信息。删除图像或文件时,我们检查 xfef 实体的引用并删除指向该图像/文件的实体(即,如果删除的图像/文件是从另一个图像/文件复制而来的)。如果我们根本找不到任何外部参照,我们将删除 blob 本身。我们不喜欢留下孤立的 blob 对隐私/合规性的影响,即使存储很便宜,但每 $$$ 都有帮助。可以这么说,我们也喜欢保持房子干净的想法。
关于java - 在 Java 中的 App Engine 上复制 blobstore 实体的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16258307/