在Java中在app引擎上制作blobstore实体副本的最佳方法是什么?

col*_*Man 5 java google-app-engine blobstore

这是我们的简单用例:user2想要将user1的文档复制到我们应用程序中的自己的存储库中.应该简单吧?我们需要做的就是在blobstore中创建第二个相同的blob,并返回我们可以与user2关联的密钥.我们必须在这里遗漏一些东西.似乎app引擎blob存储的主要功能是处理从浏览器上传和下载到浏览器的blob,并且启动服务器端的简单复制操作并不那么简单.

显而易见的解决方案似乎是在java中使用实验文件api,但没有爱.它起作用,直到你的文件大小超过MB左右,然后它失败,有些不可预测.当我们只需要在存储层中复制时,将它全部读入服务器层也似乎很愚蠢.此外,我们将实验性功能纳入生产环境的可能性很小,尽管非零.

关于我们环境的一些信息:应用程序是用Java编写的,我们使用的是blobstore,而不是云存储,现在就致力于它.我们是一个小型的部门团队,并希望说明应用引擎是一个很好的平台,但这个让我们感到难过.S3让这个简单明了,我们在这里错过了一些非常愚蠢的东西吗?

col*_*Man 1

我们最终放弃了使用文件 api 制作 blob 的编程副本并使用 Kalle 在他的评论中建议的引用的想法,并创建了一个新的外部参照实体来存储有关副本和原始文件的信息。当删除图像或文件时,我们检查 xfef 实体的引用并删除指向该图像/文件的引用(即,如果删除的图像/文件是从另一个图像/文件复制的,则创建)。如果我们根本找不到任何外部参照,我们就会删除斑点本身。我们不喜欢留下孤立的斑点而带来的隐私/合规性影响,尽管存储很便宜,但每一块钱都有帮助。可以这么说,我们也喜欢保持房子干净的想法。