我正在使用Google存储来存储用户的个人资料照片。我有几千张照片。
现在图片被保存在一个桶中,如下所示:data / images / profiles / USER_ID.jpg
所以图像的URL:https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg
我不希望用户只知道他们的USER_ID就能看到其他人的图片,而且,它必须是USER_ID才能更方便地从开发人员那里搜索。
我无法使用签名网址,因为我的用户没有Google帐户,而且存储空间中的图片是从移动应用程序中提取的。
有没有办法保存文件名,因为它们在存储中,但是简单地隐藏URL中的路径+文件名?
https://storage.cloud.google.com/fc720d5c05411b03e5e2a6692f8d7d61.jpg -> points to https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg
谢谢
你有几个选择。以下是一些:
另一种选择是在AppEngine上提供Google Images API。您可以将您的云端存储对象与Google Images API相关联,并使用此API的优势 - 安全网址,使用网址参数转换和调整图片大小。您只需为存储在GCS中的每个图像准备servingURL并保留此服务URL(例如在Google Datastore中)
ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions suo = ServingUrlOptions.Builder
.withGoogleStorageFileName(gcsImageObjectPath)
.secureUrl(true);
String servingUrl = imagesService.getServingUrl(suo);
您要发布的网址类型:
https://storage.cloud.google.com/[BUCKET_NAME]/[OBJECT_NAME]
只是为了accessing the bucket or the object directly in a browser throught the Cloud Console。
当一个应用程序想要访问该对象时,它主要是does an HTTP GET request:
https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]
或者它使用Cloud Storage client library。
我相信一个好的应用程序设计不应该让用户猜测正在调用的URL或URL模式,因此也就是桶或对象名称。但无论如何强烈建议遵循Best Practices for Google Cloud Storage:
不要在存储桶名称中使用用户ID,电子邮件地址,项目名称,项目编号或任何个人身份信息(PII),因为任何人都可以探测存储桶的存在。同样,在将PII放入对象名称时要非常小心,因为对象名称出现在对象的URL中。
此外,如果没有提供USER_ID
来访问存储桶,那么任何猜测了存储桶名称的用户将无法确定是否存在right permissions或者他们的请求将被阻止。