Amazon S3创建对象错误:POST每个请求只需要上传一个文件

时间:2016-06-10 10:53:19

标签: amazon-s3

我正在尝试通过邮递员休息客户端使用以下请求创建对象。它给出了下面提到的错误。这可能是什么原因?任何人都可以帮我解决这个问题吗?

请求:

POST HTTP/1.1
Host: 1465549420742testconbkt2.s3-us-west-2.amazonaws.com
x-amz-date: Fri, 10 Jun 2016 09:03:47 GMT
Authorization: xxxxxx
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryE19zNvXGzXaLvS5C
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="file"; filename="testFile.txt"
Content-Type: text/plain


----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="acl"

public-read-write
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="key"

testFile.txt
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="success_action_status"

200
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="AWSAccessKeyId"

AKIAJQJTU6FXS7TC2DTA
----WebKitFormBoundaryE19zNvXGzXaLvS5C

响应:

<Error>
    <Code>InvalidArgument</Code>
    <Message>POST requires exactly one file upload per request.</Message>
    <ArgumentName>file</ArgumentName>
    <ArgumentValue>0</ArgumentValue>
    <RequestId>B1EE3A8D9EA832AE</RequestId>
    <HostId>dqOG4gKXDXYKomDig1VD559Wc3XCLvPPB+uUiM6xKNiOVeMH+dvqDrAv47zy15qDIz/WvO+T3rQ=</HostId>
</Error>

提前致谢

3 个答案:

答案 0 :(得分:0)

您的边界出错:

它需要“ - ”(2破折号)比标题更多:

Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryE19zNvXGzXaLvS5C

应该是:

Content-Type: multipart/form-data;boundary=------WebKitFormBoundaryE19zNvXGzXaLvS5C

显然是发布请求

自:
HTTP POST with HttpWebRequest

答案 1 :(得分:0)

  

文件或内容必须是表单中的最后一个字段。它下面的任何字段都会被忽略。

     

http://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTForms.html

你的不是最后一个。接下来是其他表单字段,可能这让S3感到困惑,认为你有多个文件。当然,文档中的“忽略”与我的解释并不完全一致,但这可能是上传小文件的副作用,如果这就是你正在做的事情......那些在大约前20K内开始的字段如果他们来到文件之后,上传可能并不总是被忽略。

答案 2 :(得分:0)

我认为你的边界值需要为每个条目添加前缀--,最后一个边界值需要以--为后缀,如下所述(前面提到过,文件需要最后一个) :

POST HTTP/1.1
Host: 1465549420742testconbkt2.s3-us-west-2.amazonaws.com
x-amz-date: Fri, 10 Jun 2016 09:03:47 GMT
Authorization: xxxxxx
Content-Type: multipart/form-data;boundary=----WebKitFormBoundaryE19zNvXGzXaLvS5C
Cache-Control: no-cache

------WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="acl"

public-read-write
------WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="key"

testFile.txt
------WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="success_action_status"

200
------WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="AWSAccessKeyId"

AKIAJQJTU6FXS7TC2DTA    
------WebKitFormBoundaryE19zNvXGzXaLvS5C

Content-Disposition: form-data; name="file"; filename="testFile.txt"
Content-Type: text/plain
------WebKitFormBoundaryE19zNvXGzXaLvS5C--