我早些时候在这里寻找答案,只是想分享我发现的东西,现在我已经开始工作了。
你现在可以这样做了,只是有点痛苦。不支持欺骗图像或 blobstore API,并且似乎不再起作用。
看:
如果您签署您的 URL,您可以为您的内容提供自动过期链接,用于匿名或付费消费。您不希望以这种方式为您的整个网站提供服务,但对于 PDF 或诸如此类的东西,这是一个有效且半安全的选项。
缺少文档,您可能需要删除规范扩展标头的换行符。当签名错误时,存储端点会告诉您它所期望的内容。
此外,您的主机应该是:https ://storage-download.googleapis.com/
如果您使用的是 App Engine,GoogleAccessId
则为:<projectname> @appspot.gserviceaccount.com
看:app_identity.get_service_account_name()
如何生成签名的示例:
from google.appengine.api import app_identity
def signFile(path, verb='GET', md5='', contentType='',
expiration=''):
signatureRequest = '{}\n{}\n{}\n{}\n{}'.format(
verb, md5, contentType, expiration, path)
return app_identity.sign_blob(signatureRequest)
这返回一个元组(privateKey, binarySignature)
。
现在您需要构建 URL。签名应该是 base64 编码,然后是 urlencoded。有关如何完成 URL 的构建,请参阅以下内容。您应该可以使用上面提到的下载主机。
文档中的示例 URL:
https://storage.googleapis。
com/example-bucket/cat.jpeg?GoogleAccessId=example@example-project.iam.gservicea
ccount.com&Expires=1458238630&Signature=VVUgfqviDCov%2B%2BKnmVOkwBR2olSbId51kSib
uQeiH8ucGFyOfAVbH5J%2B5V0gDYIioO2dDGH9Fsj6YdwxWv65HE71VEOEsVPuS8CVb%2BVeeIzmEe8z
7X7o1d%2BcWbPEo4exILQbj3ROM3T2OrkNBU9sbHq0mLbDMhiiQZ3xCaiCQdsrMEdYVvAFggPuPq%2FE
QyQZmyJK3ty%2Bmr7kAFW16I9pD11jfBSD1XXjKTJzgd%2FMGSde4Va4J1RtHoX7r5i7YR7Mvf%2Fb17
zlAuGlzVUf%2FzmhLPqtfKinVrcqdlmamMcmLoW8eLG%2B1yYW%2F7tlS2hvqSfCW8eMUUjiHiSWgZLE
VIG4Lw%3D%3D
我希望这可以帮助别人!
哦,是的,如果您的存储桶不可公开访问(全读),您只需要执行所有签名操作。