Javascript AWS S3浏览器上载:无效策略无效JSON错误

Javascript AWS S3浏览器上载:无效策略无效JSON错误,javascript,amazon-web-services,amazon-s3,Javascript,Amazon Web Services,Amazon S3,我想直接从浏览器上传一个文件到S3机器,绕过发送到我的服务器 我已经阅读了来自amazon的相关文章,并将完整的javascript示例作为答案发布。但是,当我尝试使用javascript解决方案时,我收到以下错误: <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>InvalidPolicyDocument</Code> <Message>Invalid Policy: Inva

我想直接从浏览器上传一个文件到S3机器,绕过发送到我的服务器

我已经阅读了来自amazon的相关文章,并将完整的javascript示例作为答案发布。但是,当我尝试使用javascript解决方案时,我收到以下错误:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>InvalidPolicyDocument</Code>
<Message>Invalid Policy: Invalid JSON.</Message>
<RequestId>2F09C5449F42E3AF</RequestId>
<HostId>m++SN+V5bjFFkG0Qa5ceDveS5bBSvjFhcXANlyf2Ay11Llld3EEa54cT7rpg0cjhKLA0ItrnPgg=</HostId>
</Error>
在服务器端,我生成我的策略,并使用下面的Edit:included签名策略示例对其进行签名:

var policy = {s3PolicyBase64: "eyJleHBpcmF0aW9uIjoiMjAxNi00MS0yOVQxOjI0OjI4WiIsIm…sWyJzdGFydHMtd2l0aCIsIiRDb250ZW50LVR5cGUiLCIiXV19", s3Signature: "JlZ6UdDWVhHoeiu5urdTtQupkO0=", s3Key: "AKIAJ6LFZZBY24MBQ4GA"}
以下是我在浏览器中用于生成表单和提交帖子的代码:

  var fd = new FormData();
  // Populate the Post paramters.
  fd.append('key', key);
  fd.append('Content-Type', content_type);
  fd.append('AWSAccessKeyId', policy["s3Key"]);
  fd.append('acl', 'private');
  fd.append('success_action_redirect', "https://attachments.me/upload_callback")
  fd.append('policy', policy["s3PolicyBase64"])
  fd.append('signature',policy["s3Signature"])
  // This file object is retrieved from a file input.
  fd.append('file', $('#file_'+id)[0].files[0]);

  var xhr = new XMLHttpRequest();

  xhr.upload.addEventListener("progress", uploadProgress, false);
  xhr.addEventListener("load", uploadComplete, false);
  xhr.addEventListener("error", uploadFailed, false);
  xhr.addEventListener("abort", uploadCanceled, false);

  xhr.open('POST', dest_url, true); //MUST BE LAST LINE BEFORE YOU SEND 

  xhr.send(fd);
我已经经历了重复检查输出的缓慢过程,但是我不知道是什么导致了无效策略错误。这是我的政策的base64解码版本,也许有人能找出它的无效之处

{"expiration":"2016-41-29T1:24:28Z",
"conditions":[{"bucket":"intellilease-docs"},["eq","$key","uploads/OK/Stephens/"],{"acl":"private"},["content-length-range",0,null],["starts-with","$Content-Type",""]]}

任何帮助或建议都将不胜感激

请出示您的
政策
对象好吗?您从
策略[“s3Signature”]
策略[“s3PolicyBase64”]
获取的内容(当然,减去任何敏感密钥)再次检查您的策略。。。除非您对其进行了编辑,否则base64中有一个无效字符:
wisim…sWyJz
在那里做什么?也很可疑:
[“内容长度范围”,0,空]
。。。这是有效的json,但它是有效的策略吗?没有一个数字是“小于”NULL的,因为没有任何东西可以与不存在的值进行比较,所以这似乎很奇怪,因为这是有效的。Michael,你的评论就是这里的解决方案。我将内容长度范围更改为在最大端有一个数字,无效的json错误消失了。如果您将您的评论作为答案发布,我将接受它;对于“内容类型”。这是给空的。解决了这个问题,为我解决了问题。请出示您的
策略
对象好吗?您从
策略[“s3Signature”]
策略[“s3PolicyBase64”]
获取的内容(当然,减去任何敏感密钥)再次检查您的策略。。。除非您对其进行了编辑,否则base64中有一个无效字符:
wisim…sWyJz
在那里做什么?
也很可疑:
[“内容长度范围”,0,空]
。。。这是有效的json,但它是有效的策略吗?没有一个数字是“小于”NULL的,因为没有任何东西可以与不存在的值进行比较,所以这似乎很奇怪,因为这是有效的。Michael,你的评论就是这里的解决方案。我将内容长度范围更改为在最大端有一个数字,无效的json错误消失了。如果您将您的评论作为答案发布,我将接受它;对于“内容类型”。这是给空的。解决了这个问题,为我解决了这个问题。