Google云端存储-如何通过前端通过Vue上传图像

时间:2018-09-07 03:33:57

标签: google-cloud-platform google-cloud-storage frontend image-uploading

我有一个带有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容器中?

非常感谢帮助和代码示例!

1 个答案:

答案 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库即时生成一个常量。