2013-08-27 8 views
14

Sto utilizzando lo jQuery File Upload plugin by Blueimp per caricare immagini su un server. Il problema è che il server mittente è admin.example.com e il server ricevente in cui sono archiviate le immagini è su www.example.com. Stesso dominio, sottodominio diverso.L'intestazione PHP non funziona per Access-Control-Allow-Origin

ho seguito la instructions here on setting up cross-domain uploads, e tutto sembra essere corretta per quanto riguarda il codice, ma quando provo a caricare le immagini, ottengo questo errore:

XMLHttpRequest cannot load http://www.example.com/upload/. Origin http://admin.example.com is not allowed by Access-Control-Allow-Origin. 

La cartella di upload non hanno permessi di lettura e scrittura .

Inserirò il mio codice qui sotto: se qualcuno può mostrarmi come risolvere il problema, faccelo sapere. Avevo già chiesto informazioni su questo e avrei provato altre soluzioni (upload di iframe e trasferimento di file ftp). Nessuno di questi sarà meglio per la mia situazione, e sarebbe più semplice se solo potessi farlo in questo modo ...

RICEZIONE SERVER

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(); 

server di invio

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, 
    }); 
}); 

Ancora una volta ho provato il caricamento del file iframe, quindi per favore non suggerirlo a meno che tu non possa darmi il codice completo funzionante ...

Ho anche provato lo header('Access-Control-Allow-Origin: *'); ma ho ottenuto lo stesso errore ... Sto cercando di farlo terminare entro il fine settimana, quindi gradirei qualsiasi aiuto che posso ottenere. :)

Grazie!

EDIT: ecco le intestazioni di risposta per le opzioni richieste non riuscite

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 
+1

Guarda le richieste fatte dal tuo browser. Prima farà una richiesta OPTIONS (non GET o POST). Controlla se il tuo server risponde con le intestazioni corrette. La richiesta _real_ non ha realmente bisogno delle intestazioni CORS. – Halcyon

+0

Sembra che stia gestendo OPZIONI – mplungjan

+0

@FritsvanCampen vedi la mia modifica sopra, non vedo nulla per 'Access-Control-Allow-Origin' ... – Caleb

risposta

-1

Non abbiamo avuto alcuna soluzione, quindi ho solo spostato in una directory temporanea e utilizzato FTP per spostarlo in un altro dominio ... .

25

io uso questo intestazioni e il suo lavoro per me

header('content-type: application/json; charset=utf-8'); 
header("access-control-allow-origin: *"); 
+0

sul file index.php? – Caleb

+0

Sì. Inoltre, prova a inserire dopo "require ('UploadHandler.php');" – Aitem

+0

non so perché, ma niente sembra funzionare per me ... – Caleb

1

vorrei provare a impostare questo sul web.config in quanto si opera su un server IIS:

https://gist.github.com/corydeppen/3518666

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <!-- allowing all--> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 
0

La soluzione per me è stato quello di ri-salvare il file PHP utilizzando codifica UTF-8. Apparentemente il file di testo originale (che ho copiato in posizione e sovrascritto per il test rapido) usato stava usando qualche altra codifica funky.