为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 golang 中编码 POST 策略 - 基于浏览器的上传到亚马逊 S3?

如何在 golang 中编码 POST 策略 - 基于浏览器的上传到亚马逊 S3?

C#
慕尼黑5688855 2021-11-15 16:41:03
我正在尝试将图像文件上传到亚马逊 s3。设置如下:Web 服务器:golang前端:用于测试的简单html表单参考本文档:http : //docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html我参考了上面文档中提供的示例并尝试了这个:http ://play.golang.org/p/3zn5fSDasK  package main  import "fmt"  import "encoding/base64"  func main() {         bytePolicy := []byte(`{                     "expiration": "2013-08-06T12:00:00.000Z",                    "conditions": [                             {"bucket": "examplebucket"},                             ["starts-with", "$key", "user/user1/"],                             {"acl": "public-read"},                             {"success_action_redirect": "http://acl6.s3.amazonaws.com/successful_upload.html"},                             ["starts-with", "$Content-Type", "image/"],                             {"x-amz-meta-uuid": "14365123651274"},                             ["starts-with", "$x-amz-meta-tag", ""],                             {"x-amz-credential":"AKIAIOSFODNN7EXAMPLE/20130806/us-east-1/s3/aws4_request"},                             {"x-amz-algorithm": "AWS4-HMAC-SHA256"},                             {"x-amz-date": "20130806T000000Z" }                      ]                  }`)        fmt.Println(base64.StdEncoding.EncodeToString(bytePolicy)) }为什么我的 base64 编码策略与亚马逊的策略不匹配?
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

仅仅是因为产生这些 base64 字符串的 2 个 JSON 源文本具有不同的缩进和不同的内容,如下所示(它们不等于逐个字符)。


解码这两个 base64 字符串,您将看到差异。你可以用一个程序(不一定是 Go)来做到这一点,或者简单地使用像这样的在线服务。


您不应该担心缩进,这在 JSON 中无关紧要。但是,当您使用 Base64 对文本进行编码时,会对源的所有字符进行编码,包括用于缩进的空格和制表符,因此不同的缩进将导致不同的 Base64 编码形式。


但是对比2个解码的JSON,还有其他的不同:


第一:


"expiration": "2013-08-06T12:00:00.000Z"

"success_action_redirect": "http://acl6.s3.amazonaws.com/successful_upload.html"

第二个:


"expiration": "2013-08-07T12:00:00.000Z"

"success_action_redirect": "http://examplebucket.s3.amazonaws.com/successful_upload.html"

完整解码的 JSON 文本:


第一个:


                        "expiration": "2013-08-06T12:00:00.000Z",

                        "conditions": [

                                 {"bucket": "examplebucket"},

                                ["starts-with", "$key", "user/user1/"],

                                 {"acl": "public-read"},

                                 {"success_action_redirect": "http://acl6.s3.amazonaws.com/successful_upload.html"},

                                ["starts-with", "$Content-Type", "image/"],

                                {"x-amz-meta-uuid": "14365123651274"},

                                ["starts-with", "$x-amz-meta-tag", ""],


                                {"x-amz-credential":"AKIAIOSFODNN7EXAMPLE/20130806/us-east-1/s3/aws4_request"},

                                {"x-amz-algorithm": "AWS4-HMAC-SHA256"},

                               {"x-amz-date": "20130806T000000Z" }

                          ]

                    }

第二个:


{ "expiration": "2013-08-07T12:00:00.000Z",

  "conditions": [

    {"bucket": "examplebucket"},

    ["starts-with", "$key", "user/user1/"],

    {"acl": "public-read"},

    {"success_action_redirect": "http://examplebucket.s3.amazonaws.com/successful_upload.html"},

    ["starts-with", "$Content-Type", "image/"],

    {"x-amz-meta-uuid": "14365123651274"},

    ["starts-with", "$x-amz-meta-tag", ""],


    {"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20130806/us-east-1/s3/aws4_request"},

    {"x-amz-algorithm": "AWS4-HMAC-SHA256"},

    {"x-amz-date": "20130806T000000Z" }

  ]

}


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 193 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信