【问题标题】:Google Cloud Storage Upload file from HTML using POST. Signature issuesGoogle Cloud Storage 使用 POST 从 HTML 上传文件。签名问题
【发布时间】:2016-05-18 23:48:39
【问题描述】:

我能够将文件匿名上传到我的谷歌云存储桶,但无法使用策略和签名从 HTML 页面进行上传。

我花了很多时间阅读了几篇文章:

我还尝试按照他们的文档中描述的 HTML POST 的 Google 文档进行操作。无法发布链接,因为我只有 1 个信誉点...

My Policy Document 是一个简单的 JSON 格式,与 google 文档中的示例非常相似。

{“过期”:“2020-06-16T11:11:11Z”,

“条件”:[

["开始于", "$key", "" ],

{"acl": "bucket-owner-read" },

{"bucket": "XXXXXXXXX"},

{"success_action_redirect": "在此处重定向网址...由于我的声誉,我不得不将其删除..." },

["eq", "$Content-Type", "application/pdf" ],

[“内容长度范围”, 0, 1000000]

]

}

XX 只是编辑。

而且,我正在使用以下 HTML:

为方便显示,策略和签名字符串已被截断。

<form action="http://storage.googleapis.com/flashbidz_uploads/"
                              method="post" enctype="multipart/form-data">
                            <input type="text" name="key" value="">
                            <input type="hidden" name="bucket" value="XXXXX">
                            <input type="hidden" name="Content-Type" value="application/pdf">
                            <input type="hidden" name="GoogleAccessId" value="XXXXX@appspot.gserviceaccount.com">
                            <input type="hidden" name="acl" value="bucket-owner-read">
                            <input type="hidden" name="success_action_redirect" value="https://flashbidz.appspot.com/#/sellerhome">
                            <input type="hidden" name="policy" value="eyJleHBpcm...XQ0KfQ==">
                            <input type="hidden" name="signature" value="5P5lFuZ...nkTlyY=">

                            <input name="file" type="file">
                            <input type="submit" value="Upload">
                        </form>

当我运行它时,我会收到以下消息: 我们计算的请求签名与您提供的签名不匹配。检查您的 Google 密钥和签名方法。

我遵循的过程是从该站点 here 创建我的策略的 base64 表示,然后使用该站点 here 创建 SHA-256 签名字符串(使用 HTML 中的 Base64 表示)并签名使用我的服务帐户密钥的 private_key_id。

我还使用了电子邮件形式的密钥签名和与服务帐户关联的客户端 ID。

我不知道哪里出错了,也不知道如何调试它。任何帮助将不胜感激,我明白已经有很多关于这个主题的帖子。我都读过(可能没看懂)。

谢谢!

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    基本上您需要先进行身份验证,这将在您的浏览器会话中添加令牌,稍后您不需要显式传递令牌。 (见thisthis

    你可以找到一个例子here

    【讨论】:

    • 感谢@varunpant,我已经在多个应用程序中成功使用了 OAuth。我将查看您提供的链接,看看是否有更多线索。我只是想使用 B64 策略和签名从 HTML 页面上传。在我有时间认真研究您的建议后,我将在今天晚些时候回复。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-16
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-01
    • 2018-10-31
    相关资源
    最近更新 更多