我正在使用Google存储设备存储用户的个人资料照片。我有几千张照片。
现在,将图片保存在存储桶中,如下所示: 数据/图片/个人资料/USER_ID.jpg
因此图像的URL: https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg
我不希望用户仅知道他们的USER_ID就能看到其他人的照片,但是,它必须是USER_ID,以便从开发人员的角度更轻松地进行搜索。
我无法使用签名URL,因为我的用户没有Google帐户,并且存储中的图片是从移动应用程序中获取的。
是否有一种方法可以将文件名保留在存储中,但是可以简单地从URL隐藏路径+文件名?
https://storage.cloud.google.com/fc720d5c05411b03e5e2a6692f8d7d61.jpg -> points to https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg
谢谢
答案 0 :(得分:0)
您有几种选择。这里有一些:
答案 1 :(得分:0)
AppEngine上还有Google Images API个可用选项。您可以将Cloud Storage对象与Google Images API链接,并使用此API的好处-安全的URL,使用URL参数转换和调整图像大小。 您只需要为存储在GCS中的每张图片准备servingURL,并保留此服务网址(例如,在Google Datastore中)
ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions suo = ServingUrlOptions.Builder
.withGoogleStorageFileName(gcsImageObjectPath)
.secureUrl(true);
String servingUrl = imagesService.getServingUrl(suo);
答案 2 :(得分:-1)
您要发布的URL类型:
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来阻止他们的请求,访问存储桶。