google-cloud-storage - 如何上传文件到云存储?

标签 google-cloud-storage google-cloud-endpoints google-cloud-sql

我有一个使用 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/

相关文章:

java - 尝试将文件上传到 Google Cloud Storage 时出现 FileNotFoundException

android - 为应用引擎端点对象化 OfyService NoClassDefFoundError

google-app-engine - Android Studio 缺少 Google Cloud Endpoints

python - 通过已部署的 App Engine 应用连接到 Cloud SQL(不同区域)

python - 如何批量上传数据到appengine datastore?旧方法不起作用

google-cloud-platform - 是否可以为没有域名的GCS存储桶设置索引文件?

android - 如何使用 Google Cloud Endpoints 将字符串列表作为参数传递

python - 尽管设置了 IAM 权限,但无法从不同的 GCP 项目访问 Google Cloud SQL 实例

java - 有时与 Android 的 JDBC 连接不起作用

用于读取 SAS .xpt 文件的 pandas.read_sas() 不适用于存储在 Google Cloud Storage (GCS) 中的文件