我使用drupal模块通过CORS通过Amazon s3发送文件。问题是,当我使用jQuery CORS上传文件时,内容类型设置为false,而是读取ajax参数中的false值,并使用执行请求时使用的边界设置multipart / form-data,从而导致预检CORS OPTIONS请求被亚马逊s3发送然后拒绝。我不确定是否需要更改发送到jQuery.ajax的args,或者我是否必须在s3存储桶CORS策略中更改某些内容,或者是否存在某个错误。
这是jquery代码:
$.ajax({
// data.form.action is the S3 URL to which this upload will be POSTed.
url: data.form.action,
type: 'POST',
mimeType: 'multipart/form-data',
data: fd,
cache: false,
contentType: false,
processData: false,
xhrFields: {
withCredentials: true
},
这是存储桶中的CORS策略
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<ExposeHeader>x-amz-version-id</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
任何有助于弄清楚为什么浏览器发送带有错误内容类型标题的预检消息的帮助将非常受欢迎。