BlueimpによるjQuery File Uploadプラグイン を使用して、サーバーに画像をアップロードしています。問題は、送信サーバーが_admin.example.com
_であり、画像が保存されている受信サーバーが_www.example.com
_にあることです。同じドメイン、異なるサブドメイン。
クロスドメインアップロードの設定に関する指示 に従い、コードに関してはすべて正しいようですが、画像をアップロードしようとするとこのエラーが発生します:
_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
_
私はこのヘッダーとその作業を私のために使用します
header('content-type: application/json; charset=utf-8');
header("access-control-allow-Origin: *");
IISサーバーで操作しているため、web.configでこれを設定しようとします。
https://Gist.github.com/corydeppen/3518666
<system.webServer>
<httpProtocol>
<customHeaders>
<!-- allowing all-->
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
私にとっての解決策は、PHPファイルを再保存することでした。明らかに元のテキストファイル(私はその場所にコピーして、テスト)使用された他のいくつかのファンキーなエンコーディングを使用していました。