2016-12-16 6 views
0

UPDATE 1: Domänenübergreifenden Zugriff auf Serverseite zulassen.
UPDATE 2: Versuchen Sie den Upload mit Chrome mit deaktivierter Sicherheit.Foto kann nicht mit ngFlow zu URL mit Cross-Domain (CORS) hochgeladen werden

Ich habe ngFlow erfolgreich verwendet, wenn target URL unter der gleichen Domäne festgelegt ist. Das Problem ist, dass es eine Firewall-Einrichtung gibt und der Upload fehlschlägt, weil das Bild von der Firewall mit einem bestimmten Muster übereinstimmt, das den Upload blockiert und das Bild nicht an den Server gesendet wird. Das Seltsame ist, dass kein Fehler an den Client gemeldet wird. Der Upload stoppt einfach.

Laut Netzwerkadministrator müssen wir den Upload an eine andere URL senden, die eine andere Domäne ist, um die Firewall zu umgehen. Als ich die target auf absolute URL für eine andere Domain gesetzt, bekomme ich diesen Fehler in Chrome, wenn der Upload-Prozess ausgeführt wird:

XMLHttpRequest kann nicht geladen werden https://blabla/PhotoUploadCmd?imageOperation=u ... tjpg & flowFilename = Desert.jpg & flowRelativePath = Desert.jpg & flowTotalChunks = 1. Die Antwort auf die Preflight-Anforderung übergibt die Zugriffskontrollprüfung nicht: Auf der angeforderten Ressource ist kein Header "Access-Control-Allow-Origin" vorhanden. Origin 'http://10.100.22.111:8282' ist daher nicht erlaubt.

Dies ist der der Code Teil, der ng-Flow konfiguriert: auf UAT Maschine passiert

app.config(['flowFactoryProvider', function (flowFactoryProvider) { 
    flowFactoryProvider.defaults = { 
    target : "/blabla/PhotoUploadCmd?imageOperation=upload", 
    //permanentErrors: [404, 500, 501], 
    permanentErrors : [ 500, 501 ], 
    maxChunkRetries: 1, 
    chunkRetryInterval: 5000, 
    simultaneousUploads: 4, 
    singleFile: true, 
    progressCallbacksInterval : 1, 
    withCredentials : true, 
    method : "octet", 
    forceChunkSize : true, 
    testChunks: false 
    }; 

    flowFactoryProvider.on('catchAll', function (event) { 
    //console.log('catchAll', arguments); 
    }); 
}]); 

Wohlgemerkt, dass die Firewall-Problem nur. Wenn ich den Upload auf meinem lokalen Tomcat-Server teste, funktioniert es einwandfrei.

I auch versucht, die folgenden:

  • hinzugefügt, um die folgenden Codezeilen auf der JSP (der Teil einer Innenrahmen geladen wird), aber immer noch der gleiche Fehler No 'Access-Control-Allow-Origin' header is present on the requested resource:

The Code:

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); 
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
response.setHeader("Access-Control-Max-Age", "3600"); 
response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
  • Versuchte Chrom mit Sicherheit zu öffnen deaktiviert:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:\path-to-data-folder\Chrome"

das obige Verfahren verwenden, arbeitete Upload zu einer anderen Domäne, aber Chrome angezeigt, um die Warnung You are using unsupported command-line flag.... Es versteht sich von selbst, dass diese Methode nicht für den Produktionseinsatz geeignet ist.

Wenn Sie eine Idee haben, wie Sie das Problem der Firewall lösen oder ng-flow erlauben, den Upload durchzuführen und den domänenübergreifenden Zugriff zu erlauben, lassen Sie es mich wissen.

Tarek

+0

_ "Ich auch die folgenden Codezeilen auf der JSP hinzugefügt "_ - was bedeutet das, wo ist" auf der JSP "- ist das die Remote-Domäne, die Sie _to_ hochladen? – CBroe

+0

Reg.-Nr. 'Die der JSP-Seite hinzugefügten Codezeilen '... diese JSP-Seite wird vom inneren' iframe 'des Hauptportals referenziert. Die JSP wird auf dem Tomcat-Server gehostet, der sich ebenfalls in derselben Domäne befindet, in der das Upload-Servlet gehostet wird. Beachten Sie, dass der Upload funktionierte, als ich die Chrome-Websicherheit deaktivierte, als ich an eine andere Domäne übermittelte, die schließlich auf den gleichen Image-Upload-Ordner verweist, aber nicht über die Firewall-Konfigurationsprobleme verfügt. – tarekahf

Antwort

-1

Dies ist ein serverseitiges Problem ...Sie müssen

Access-Control-Allow-Header setzen: Content-Type Access-Control-Allow-Methoden: GET, POST, OPTIONS Access-Control-Allow-Origin: *

+0

Vielen Dank @Patrick, ich habe die Codezeilen wie angegeben hinzugefügt, siehe die aktualisierte Beschreibung oben. Lassen Sie mich wissen, ob es eine andere Lösung gibt. – tarekahf

Verwandte Themen