“存储桶POST必须包含一个名为'key'的字段”错误

我正在尝试使用预先签名的POST URL(使用boto3生成)将文件上传到s3。</ p>

以下是生成的预签名URL中的字段:</ p>

  {“ acl”:“ private”,
“ key”:“ 4982bfe3-fae9 -42a5-9502-4cc3fcd9ee87__swcli “
”X-AMZ-算法“:
”个AWS4-HMAC-SHA256“,
”X-AMZ-凭据“:” AKIAICDC2ZVHRX25EYNQ / 20180626 /美东-1 / S3 / aws4_request“,
” x-amz-date“:” 20180626T014755Z“,
” policy“:” eyJleDE0NzU1WiJ9XX0 =“,
” x-amz签名“:” f803ef38cbdd8a16“}
</ code> </ pre>

我正在使用此代码发出请求</ p>

  x:= make(map [string] string)
x [“ key”] ,_ = jsonparser.GetString(* fields,“ key”)
x [“ acl”],_ = jsonparser.GetString(* fields,“ acl”)
x [“ x-amz-algorithm”],_ = jsonparser .GetString(* fields,“ x-amz-credential”]
x [“ x-amz-credential”],_ = jsonparser.GetString(* fields,“ x-amz-credential”)
x [“ x-amz -date“],_ = jsonparser.GetString(* fields,” x-amz-date“)
x [” policy“],_ = jsonparser.GetString(* fields,” policy“)
x [” x-amz-signature“],_ = jsonparser.GetString(* fields,” x-amz-signature“)

c:= new(http.Client)
req:= request.NewRequest(c)
req。 数据= x
f,错误:= os.Open(“ filewriter.go”)
if错误!= nil {
fmt.Println(“ errored”)
}

req.Files = []请求。 FileField {
request.FileField {“ file”,“ filewriter.go”,f},
}
resp,err:= req.Post(“ http://btrads-78.s3.amazonaws.com”)

fmt.Println((resp.Text()))`
</ code> </ pre>

并收到此错误:
Bucket POST必须包含一个名为“ key”的字段 ”。 如果已指定,请检查字段的顺序。</ code> </ p>

我尝试尝试使用x中 key </ code>的不同顺序的组合,并使用不同的 HTTP客户端,但出现相同的错误。 我在做什么错了?</ p>
</ div>

展开原文

原文

I am trying to upload a file to s3 using a presigned POST URL (generated using boto3).

These are the fields in the generated presigned URL:

{"acl":"private",
"key":"4982bfe3-fae9-42a5-9502-4cc3fcd9ee87__swcli",
"x-amz-algorithm":
"AWS4-HMAC-SHA256",
"x-amz-credential":"AKIAICDC2ZVHRX25EYNQ/20180626/us-east-1/s3/aws4_request",
"x-amz-date":"20180626T014755Z",
"policy":"eyJleDE0NzU1WiJ9XX0=",
"x-amz signature":"f803ef38cbdd8a16"}

I am using this code to make the request

x := make(map[string]string)
x["key"],_ = jsonparser.GetString(*fields,"key")
x["acl"],_ = jsonparser.GetString(*fields,"acl")
x["x-amz-algorithm"],_ = jsonparser.GetString(*fields,"x-amz-algorithm")
x["x-amz-credential"],_ = jsonparser.GetString(*fields,"x-amz-credential")
x["x-amz-date"],_ = jsonparser.GetString(*fields,"x-amz-date")
x["policy"],_ = jsonparser.GetString(*fields,"policy")
x["x-amz-signature"],_ = jsonparser.GetString(*fields,"x-amz-signature")

c := new(http.Client)
req := request.NewRequest(c)
req.Data = x
f, err := os.Open("filewriter.go")
if err!=nil{
    fmt.Println("errored")
}

req.Files = []request.FileField{
    request.FileField{"file", "filewriter.go", f},
}
resp, err := req.Post("http://btrads-78.s3.amazonaws.com")
fmt.Println((resp.Text()))`

And receiving this error: Bucket POST must contain a field named 'key'. If it is specified, please check the order of the fields.

I have tried trying different combinations of order of key in x and using different HTTP client, but I am getting the same error. What am I doing wrong?

douzhang6176
douzhang6176 文件部分必须是写入表单的最后一个部分。
大约 2 年之前 回复
du22399
du22399 不想让您讨厌X尝试Y家伙,但是为什么不使用AWSGo包装器呢?github.com/aws/aws-sdk-go
大约 2 年之前 回复
dongxi1320
dongxi1320 已经尝试过!那里也没有运气。
大约 2 年之前 回复
dongpu1881
dongpu1881 可以肯定的是,尝试json.Unmarshal将json放入地图中。与手动分配每个字段相比,它不容易出错。
大约 2 年之前 回复
dtiu94034
dtiu94034 我已经通过打印出传递给表单的每个值来手动检查了解析错误。不幸的是,那里没有错误!
大约 2 年之前 回复
dougao1106
dougao1106 字段x-amz-signature在json中具有不同的密钥。有关系吗?
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐