我正在尝试使用JSON API将图像上传到Google云端存储上的存储桶中,使用Javascript示例:Api Javascript示例
我可以上传图片,但它要求我登录我的…
上传对象需要某种形式的授权(您也可以创建一个允许真正匿名写入的存储桶,但这很少是一个好主意)。有几种方法可以获得授权。
正如您所发现的,一种方法是让用户登录其Google帐户并将其用作授权。如果应用程序适用于少数已知个人,那么这是一个不错的选择。
上传图像的另一种方法是使用签名URL或签名表单策略文档。这样,您的用户就可以使用标准HTML表单来选择和上传已由您的应用预先授权的图片。策略文档是一小段文本,描述了允许用户执行的操作以及已由相应凭据签名的内容。
以下是政策文件的示例:
{"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] ] }
本文档指定用户只能使用它来上传具有bucket-owner-read ACL的对象,仅用于上传到存储桶“travel-maps”,可能只上传最大1兆字节的对象,依此类推。然后,服务器将使用其密钥对此文档进行签名。然后,文档(在base 64中)及其签名将包含在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>
这里有更多关于它如何工作的文档:
https://cloud.google.com/storage/docs/reference-methods#policydocument
请注意,签名网址与签名表单不同。 “签名URL”是非常具体的,任意命令,可以完全按照规定执行。您可以将它们用于上传,但它们的功能不如签名的政策文件。
由于谷歌云存储没有一种简单的上传图像的方式(2014),我最终使用了亚马逊网络服务,甚至还附带了NodeJS示例代码。简单易用。
http://aws.amazon.com/es/developers/getting-started/nodejs/
克隆样本:
git clone https://github.com/awslabs/aws-nodejs-sample.git
安装:
npm install
跑:
node sample.js
Sample带有桶使用,甚至可以将文件存储在桶中。这样就可以了。请务必更改您的凭据:
aws_access_key_id = YOUR_ACCESS_KEY_ID aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
干杯!