我正在使用jQuery File Upload plugin by Blueimp将图片上传到服务器。问题是,发送服务器是admin.example.com
,存储图像的接收服务器位于www.example.com
。相同的域名,不同的子域名。
我关注instructions here on setting up cross-domain uploads,就代码而言,一切似乎都是正确的,但是当我尝试上传图片时,我收到此错误:
XMLHttpRequest cannot load http://www.example.com/upload/. Origin http://admin.example.com is not allowed by Access-Control-Allow-Origin.
上传文件夹确实具有读写权限。
我将在下面发布我的代码 - 如果有人能告诉我如何解决这个问题,请告诉我。之前我曾经问过这个问题,并且会尝试其他一些解决方案(iframe上传和ftp文件移动)。这些都不适合我的情况,如果我能这样做就最简单......
接收服务器
index.php
<?php
header('Access-Control-Allow-Origin: http://admin.example.com'); //I have also tried the * wildcard and get the same response
header("Access-Control-Allow-Credentials: true");
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
?>
<?php
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$upload_handler = new UploadHandler();
发送服务器
main.js
$(function () {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
// Uncomment the following to send cross-domain cookies:
xhrFields: {withCredentials: true},
url: 'http://admin.example.com/upload/',
disableImageResize: false,
dropZone: $('#dropzone'),
imageMaxWidth: 1800,
imageMaxHeight: 1800,
});
});
我再次尝试上传iframe文件,所以请不要建议,除非你能给我完整的代码......
我也试过header('Access-Control-Allow-Origin: *');
但是得到了同样的错误......我试图在周末结束这件事,所以我很感激我能得到的任何帮助。 :)
谢谢!
编辑:这是失败的OPTIONS请求的响应标头
Allow:OPTIONS, TRACE, GET, HEAD, POST
Content-Length:0
Date:Tue, 27 Aug 2013 15:08:29 GMT
Public:OPTIONS, TRACE, GET, HEAD, POST
Server:Microsoft-IIS/7.5
X-Powered-By:ASP.NET
答案 0 :(得分:25)
我使用此标题及其为我工作
header('content-type: application/json; charset=utf-8');
header("access-control-allow-origin: *");
答案 1 :(得分:1)
我会尝试在web.config上设置此项,因为您正在IIS服务器上运行:
https://gist.github.com/corydeppen/3518666
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- allowing all-->
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
答案 2 :(得分:0)
我的解决方案是使用UTF-8编码重新保存PHP文件。显然,我使用的原始文本文件(我复制到位并用于快速测试覆盖)使用了其他一些时髦的编码。
答案 3 :(得分:-2)
没有得到任何解决方案,所以我只是将其移动到一个临时目录并使用FTP将其移动到另一个域....