go - “桶 POST 必须包含一个名为‘key’的字段”错误
问题描述
我正在尝试使用预签名的 POST URL(使用 boto3 生成)将文件上传到 s3。
这些是生成的预签名 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"}
我正在使用此代码提出请求
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()))`
并收到此错误:
Bucket POST must contain a field named 'key'. If it is specified, please check the order of the fields.
我尝试尝试不同的key
in x 顺序组合并使用不同的 HTTP 客户端,但我得到了同样的错误。我究竟做错了什么?
解决方案
推荐阅读
- r - 如何使用 R 中的映射文件更改多个数据框中的列名称?
- java - 在具有空值的情况下按列对二维 Java 字符串数组进行排序
- java - 在屏幕上打印 .txt
- c - 函数返回 1 而不是一个值?
- sql - 如何在sql中获取多个值?
- windows - 为什么 Windows 没有给我一个我要求的大小的窗口?
- python - 如何自动化需要在 linux 命令行中输入两个输入的 python 程序?
- android - 在不配对的情况下为 iOS 附加广告负载
- c++ - 将日语 wstring 转换为 std::string
- google-bigquery - 为查询中的每个结果创建一个 BigQuery VIEW