上传时,Amazon S3存储桶MalformedXML错误

use*_*220 8 xml xmlhttprequest amazon-s3 amazon-web-services cors

我正在尝试将图片上传到我的Amazon S3存储桶.这是我的XMLHttpRequest的代码:

var form_data = new FormData();
form_data.append(filename, file);
var xhr = new XMLHttpRequest();
xhr.open('PUT', 'https://bucket-name.s3.amazonaws.com', true);
xhr.send(form_data);
Run Code Online (Sandbox Code Playgroud)

我已将CORS配置如下:

<CORSConfiguration>
  <CORSRule>
    <AllowedOrigin>http://localhost:3000</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>DELETE</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
  </CORSRule>
</CORSConfiguration>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我尝试上传到它时,我不断收到以下错误:

PUT https://bucket-name.s3.amazonaws.com 400 (Bad Request)
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>MalformedXML</Code><Message>The XML you provided was not well-formed or 
did not validate against our published schema</Message><RequestId>6188AA51D1EE6B38</RequestId>
<HostId>f3d5Aj8bMyMOJywRnYKH/tBXRHCDWFvNzcb4ejs9F4/IulP1P2n0XoN1mDq7LpQgL/RIsW1c6RA=</HostId></Error>
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?

pmc*_*ane 17

看起来您正在将PUT请求发送到存储桶本身,而没有对象名称.S3将此解释为PUT BUCKET请求,并期望正文为CreateBucketConfiguration XML文档.

要上传文件,您的XHR公开呼叫应该更像:

xhr.open('PUT', 'https://bucket-name.s3.amazonaws.com/' + filename, true);
Run Code Online (Sandbox Code Playgroud)

文档中有一个示例请求.