我有一个使用 Cloud SQL 存储数据的 Google Cloud Endpoints。我想为客户提供文件上传,文件应该存储在 Cloud Storage 中,但我还想在 Cloud SQL 中存储文件元数据和文件存储 url。
最好的做法是什么?
我可以通过云端点上传文件还是需要额外的上传 Servlet?
如何更新需要引用上传文件的数据库实体。
关于如何结合这 3 种技术的任何示例?
最佳答案
假设您的客户没有添加到您的谷歌云项目(通常是这种情况),您的用户没有对您的 GCS 存储桶的写入权限。您可以将文件提交到您的应用程序并从那里移动到 GCS(不推荐,因为会消耗更多网络和 CPU),或者更好的方法是直接提交到 GCS。
要让客户端直接写入您的 GCS 存储桶,您需要: 1. 将您的访问 key 放在客户端上以进行写访问(不推荐),如果客户端由有限受信任的人使用。 2. 生成限时 token ,作为签名URL放在客户端直接上传。
端点 API 本身无法执行此操作,但您可以在服务器上生成签名的 GCS URL,然后使用客户端上的端点获取它。然后将其设置为表单操作(在Web客户端,其他客户端也有类似的签名上传方式)并提交表单以上传文件。
<form action="SIGNED_URL_FROM_ENDPOINTS" method="post" enctype="multipart/form-data">
我没有看到开源代码可以做到这一点,但最接近的是 this project that does generate the signed URL with a time-out (the only unintuitive part) .
更新数据库中元数据的最佳方式是 watch GCS bucket using 'Object Change Notifications' .另一种方法是从客户端本身将元数据发送到您的服务器,这可以是端点调用。您还可以混合使用这两种方式,其中元数据甚至在文件上传之前就使用端点发送到服务器,并且通知会更新记录以确认它可以提供服务。
关于google-cloud-storage - 如何上传文件到云存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23952123/