我有一个带有Vue前端构建和Express后端构建的应用程序,我有一个可以上传网站图像的功能。现在我正在使用cloudinary,它非常易于使用,我可以使用以下命令在前端进行上传:
<upload action=https://api.cloudinary.com/v1_1/devenv/image/upload></upload>
,它将返回可用于提供图像的URL。
我想知道Google Cloud Storage是否有类似的URL,我查阅了文档,推荐的方法是使用nodejs
客户端。那么,是否必须在后端编写一个端点才能使此上载正常工作?
另外,后端上传的另一个问题是authentication
Google客户端使用JSON文件进行身份验证,可以进行开发,但是如果后端在GCP kubernetes引擎上运行,我应该如何进行生产?有什么方法可以将它们连接在一起而无需将JSON文件放在Docker容器中?
非常感谢帮助和代码示例!
答案 0 :(得分:1)
要允许用户通过POST表单将对象上传到GCS,您将需要创建一个“政策文档”,以描述用户可以上传,然后对其签名,然后将该签名文档作为形式的参数。您可以在此处阅读有关通过POST上传到GCS的更多信息:https://cloud.google.com/storage/docs/xml-api/post-object
尤其要注意以下有关已签署的政策文件的部分: https://cloud.google.com/storage/docs/xml-api/post-object#policydocument
以下是政策文件示例:
{
"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]
]
}
然后您需要对该文档进行base64处理,并使用您希望用户用作上传目的的服务帐户的私钥对结果进行签名,然后在隐藏字段中提供它们,如下所示:
<input type="hidden" name="policy" value="eyJleHBpcmF0aW9uIjogIjIwMTAtMDYtMTZUMTE6MTE6MTFaIiwNCiAiY29uZGl0aW9ucyI6IFsNCiAgWyJzdGFydHMtd2l0aCIsICJrZXkiLCAiIiBdLA0KICB7ImFjbCI6ICJidWNrZXQtb3duZXItcmVhZCIgfSwNCiAgeyJidWNrZXQiOiAidHJhdmVsLW1hcHMifSwNCiAgeyJzdWNjZXNzX2FjdGlvbl9yZWRpcmVjdCI6ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL3N1Y2Nlc3Nfbm90aWZpY2F0aW9uLmh0bWwiIH0sDQogIFsiZXEiLCAiQ29udGVudC1UeXBlIiwgImltYWdlL2pwZWciIF0sDQogIFsiY29udGVudC1sZW5ndGgtcmFuZ2UiLCAwLCAxMDAwMDAwXQ0KICBdDQp9">
<input type="hidden" name="signature" value="BSAMPLEaASAMPLE6SAMPLE+SAMPPLEqSAMPLEPSAMPLE+SAMPLEgSAMPLEzCPlgWREeF7oPGowkeKk7J4WApzkzxERdOQmAdrvshKSzUHg8Jqp1lw9tbiJfE2ExdOOIoJVmGLoDeAGnfzCd4fTsWcLbal9sFpqXsQI8IQi1493mw=">
策略文档是JSON字符串,已使用base64进行了编码,并作为POST请求的一部分作为隐藏输入传递到GCS。您可以在代码中将其声明为常量,也可以使用JSON和base64库即时生成一个常量。