Google 带签名的存储 url
Google storage with signed url
如何使用content-type上传文件mutlipart/formdata ---boundaryString
使用 signed url 的 google 存储空间 ?
我面临的问题是,当我们使用浏览器上传文件时,浏览器将内容类型设为 mutlipart/formdata ---boundaryString
,其中 boundaryString
是 content-type header值。
现在,由于 google 签名方法要求 content-type 成为签名的一部分。生成签名的 url 变得不可能。
对于使用网络上的表单上传,GCS 提供了一种替代常规签名 URL 的方法,称为 "policy document."上传可以,也可以不可以,并且作为表单的参数之一包含在内post。
详情见https://cloud.google.com/storage/docs/xml-api/post-object#policydocument。
因此,例如,允许上传的 HTML 表单如下所示:
<form action="http://travel-maps.storage.googleapis.com"
method="post"
enctype="multipart/form-data">
<input type="text" name="key" value="">
<input type="hidden" name="bucket" value="travel-maps">
<input type="hidden" name="Content-Type" value="image/jpeg">
<input type="hidden" name="GoogleAccessId" value="1234567890123@developer.gserviceaccount.com">
<input type="hidden" name="acl" value="bucket-owner-read">
<input type="hidden" name="success_action_redirect" value="http://www.example.com/success_notification.html">
<input type="hidden" name="policy" value="eyJleHBpcmF0aW9uIjogIjIwMTAtMDYtMTZUMTE6MTE6MTFaIiwNCiAiY29uZGl0aW9ucyI6IFsNCiAgWyJzdGFydHMtd2l0aCIsICJrZXkiLCAiIiBdLA0KICB7ImFjbCI6ICJidWNrZXQtb3duZXItcmVhZCIgfSwNCiAgeyJidWNrZXQiOiAidHJhdmVsLW1hcHMifSwNCiAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3N1Y2Nlc3Nfbm90aWZpY2F0aW9uLmh0bWwiIH0sDQogIFsiZXEiLCAiQ29udGVudC1UeXBlIiwgImltYWdlL2pwZWciIF0sDQogIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDAwMDAwXQ0KICBdDQp9">
<input type="hidden" name="signature" value="BSAMPLEaASAMPLE6SAMPLE+SAMPPLEqSAMPLEPSAMPLE+SAMPLEgSAMPLEzCPlgWREeF7oPGowkeKk7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9sFpqXsQI8IQi1493mw=">
<input name="file" type="file">
<input type="submit" value="Upload">
</form>
"policy" 字段包含对用户可以上传的内容的描述。这是一个 JSON 文档,经过 base 64 编码。未编码,看起来像这样:
{"expiration": "2010-06-16T11:11:11Z",
"conditions": [
["starts-with", "$key", "" ],
{"acl": "bucket-owner-read" },
{"bucket": "travel-maps"},
{"success_action_redirect": "http://www.example.com/success_notification.html" },
["eq", "$Content-Type", "image/jpeg" ],
["content-length-range", 0, 1000000]
]
}
"signature" 字段的工作方式与已签名的 URL 字段类似,只是您签署的是政策,而不是请求。它是政策文件rsa/sha-256的base64编码。
如何使用content-type上传文件mutlipart/formdata ---boundaryString
使用 signed url 的 google 存储空间 ?
我面临的问题是,当我们使用浏览器上传文件时,浏览器将内容类型设为 mutlipart/formdata ---boundaryString
,其中 boundaryString
是 content-type header值。
现在,由于 google 签名方法要求 content-type 成为签名的一部分。生成签名的 url 变得不可能。
对于使用网络上的表单上传,GCS 提供了一种替代常规签名 URL 的方法,称为 "policy document."上传可以,也可以不可以,并且作为表单的参数之一包含在内post。
详情见https://cloud.google.com/storage/docs/xml-api/post-object#policydocument。
因此,例如,允许上传的 HTML 表单如下所示:
<form action="http://travel-maps.storage.googleapis.com"
method="post"
enctype="multipart/form-data">
<input type="text" name="key" value="">
<input type="hidden" name="bucket" value="travel-maps">
<input type="hidden" name="Content-Type" value="image/jpeg">
<input type="hidden" name="GoogleAccessId" value="1234567890123@developer.gserviceaccount.com">
<input type="hidden" name="acl" value="bucket-owner-read">
<input type="hidden" name="success_action_redirect" value="http://www.example.com/success_notification.html">
<input type="hidden" name="policy" value="eyJleHBpcmF0aW9uIjogIjIwMTAtMDYtMTZUMTE6MTE6MTFaIiwNCiAiY29uZGl0aW9ucyI6IFsNCiAgWyJzdGFydHMtd2l0aCIsICJrZXkiLCAiIiBdLA0KICB7ImFjbCI6ICJidWNrZXQtb3duZXItcmVhZCIgfSwNCiAgeyJidWNrZXQiOiAidHJhdmVsLW1hcHMifSwNCiAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3N1Y2Nlc3Nfbm90aWZpY2F0aW9uLmh0bWwiIH0sDQogIFsiZXEiLCAiQ29udGVudC1UeXBlIiwgImltYWdlL2pwZWciIF0sDQogIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDAwMDAwXQ0KICBdDQp9">
<input type="hidden" name="signature" value="BSAMPLEaASAMPLE6SAMPLE+SAMPPLEqSAMPLEPSAMPLE+SAMPLEgSAMPLEzCPlgWREeF7oPGowkeKk7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9sFpqXsQI8IQi1493mw=">
<input name="file" type="file">
<input type="submit" value="Upload">
</form>
"policy" 字段包含对用户可以上传的内容的描述。这是一个 JSON 文档,经过 base 64 编码。未编码,看起来像这样:
{"expiration": "2010-06-16T11:11:11Z",
"conditions": [
["starts-with", "$key", "" ],
{"acl": "bucket-owner-read" },
{"bucket": "travel-maps"},
{"success_action_redirect": "http://www.example.com/success_notification.html" },
["eq", "$Content-Type", "image/jpeg" ],
["content-length-range", 0, 1000000]
]
}
"signature" 字段的工作方式与已签名的 URL 字段类似,只是您签署的是政策,而不是请求。它是政策文件rsa/sha-256的base64编码。