2016-07-07 9 views
0

Ich möchte direkt von AngularJSAngularJS Direct Upload zu Google Cloud Storage Fehler

Dateigröße größer als 32 MB bis GCS hochzuladen ich erfolgreich Blobstore laden konnte, wenn die Dateigröße kleiner als 32 MB ist, den Code unten angegebenen.

$http.post(uploadUrl, $scope.formData, { 
    withCredentials: true, 
    headers: {'Content-Type': undefined}, 
    transformRequest: angular.identity 
}); 

Wenn ich versuche, die Datei mit URL https://storage.googleapis.com/bucket-name/filename, ich habe den folgenden Fehler zu laden.

Credentials flag is 'true', but the 'Access-Control-Allow-Credentials' header is ''. It must be 'true' to allow credentials. Origin 'http://localhost:8080' is therefore not allowed access.

Wenn ich Flagge withCredentials: true in http Post verwendet entfernen, bekam ich Antwort als 403, werden keine Fehlerdetails gegeben.

Ich habe den cors gesetzt, wie für den Upload Eimer erwähnt [{"maxAgeSeconds": 3600, "method": ["GET", "POST", "HEAD"], "origin": ["http://localhost:8088"], "responseHeader": ["Content-Type"]}]

Wie Access-Control-Allow-Credentials Flag in dem Server aktivieren?

Antwort

1

Sie können dies erreichen, während Sie weiterhin den Blobstore verwenden und nicht zu Cloud Storage wechseln. Google-Dokumente, die ziemlich gut verarbeitet werden. Warnung: Es klingt für mich wie Google dies als Legacy-Funktion unterstützt, sondern empfiehlt stattdessen Could Storage. Ich habe das nicht persönlich gemacht, aber es klingt wie Signed URLs kann die Antwort dort sein.

Wenn Sie mit dem Blobstore fortfahren möchten, wie ich, sind Anweisungen für die serverseitige Einrichtung in Java here. Sie sollten ähnliche Anweisungen für andere Sprachen bei ähnlichen URLs finden. :)

Der heikle Teil, den ich zuerst nicht verstanden habe: Die direkte Upload-Anfrage macht ihr Ding, dann macht sie einen Anruf direkt an deinen Server mit Informationen über den Upload und benutzt dann die Antwort deines Servers als Antwort zurück der Kunde. So können Sie beispielsweise den Header Access-Control-Allow-Origin im Upload-Handler Ihres Servers festlegen, und er wird der Antwort aus dem Link für den direkten Upload hinzugefügt.

+0

Hallo @Eric, danke für die Antwort. Ich habe versucht, signierte URL wie vorgeschlagen, ich habe den gleichen Fehler. Der Download ist erfolgreich, aber nicht hochgeladen. Für das Hochladen durch Blobstore, habe ich einen anderen Fehler, bitte http://stackoverflow.com/questions/38344261/gcs-heap-error-when-file-of-higher-size-was-uploaded. Ich konnte den Header 'Access-Control-Allow-Origin' nicht erfolgreich verwenden, indem ich httpProvider default header '$ httpProvider.defaults.headers.common [' Access-Control-Allow-Origin '] =' * ';' mit 'withCredentials änderte : Falsche Einstellung hat nicht viel geholfen. Könnten Sie mir helfen, den Header zu verwenden? – SetV

+0

Sie müssen diesen Header auf _response_ von Ihrem _server_ gesendet, keine Anfrage von Ihrem Client. In Ihrem Java-Code (den ich sehe, ist Ihre bevorzugte Sprache aus der anderen Frage, die Sie verlinkt haben), könnten Sie 'resp.setHeader (" Access-Control-Allow-Origin "," * ") verwenden;'. –

+0

Hallo @Eric, ich kann bei Ihren ersten beiden Lösungen bleiben. Das hilft wirklich! – SetV