2016-07-07 75 views
0

我想超過32MB直接從AngularJSAngularJS直接上傳到谷歌雲存儲錯誤

上傳文件的大小更高GCS我能成功上傳到Blobstore當文件大小小於使用下面給出的代碼32MB。

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

當我嘗試上傳使用URL https://storage.googleapis.com/bucket-name/filename文件,我得到了下面的錯誤。

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.

當我刪除HTTP POST已使用標誌withCredentials: true,我得到了響應,403,沒有錯誤給出細節。

我已經設置了CORS提到的上傳存儲 [{"maxAgeSeconds": 3600, "method": ["GET", "POST", "HEAD"], "origin": ["http://localhost:8088"], "responseHeader": ["Content-Type"]}]

如何啓用Access-Control-Allow-Credentials國旗在服務器?

回答

1

您可以在繼續使用Blobstore的同時完成此操作,而不必切換到雲存儲。 Google文檔處理得相當好。警告:這聽起來像谷歌支持這是一個遺留功能,但建議使用可以存儲,而不是。我個人並沒有這樣做,但聽起來像Signed URLs可能是那裏的答案。

如果您想繼續使用blobstore,如我所知,Java中服務器端設置的說明是here。您應該在類似的網址找到與其他語言類似的說明。 :)

我最初不明白的一個棘手的部分:直接上傳請求做它的事情,然後直接打電話給您的服務器與上傳的信息,然後使用您的服務器的響應作爲迴應客戶端。例如,您可以在服務器的上傳處理程序中設置Access-Control-Allow-Origin標頭,並將其添加到直接上載鏈接的響應中。

+0

嗨@Eric,謝謝你的迴應。我嘗試簽署的網址,因爲我有同樣的錯誤。下載成功但不上傳。對於通過blobstore上傳,我得到了一個不同的錯誤,請參考http://stackoverflow.com/questions/38344261/gcs-heap-error-when-file-of-higher-size-was-uploaded。 我無法成功使用'Access-Control-Allow-Origin'標頭,修改httpProvider默認標頭'$ httpProvider.defaults.headers.common ['Access-Control-Allow-Origin'] ='*';'with'withCredentials :虛假設置沒有太大幫助。你能指導我使用標題嗎? – SetV

+0

您需要在_server_發送的_response_上設置該標頭,而不是來自客戶端的請求。因此,在您的Java代碼中(我看到的是您鏈接的其他問題的選擇語言),您可以使用'resp.setHeader(「Access-Control-Allow-Origin」,「*」);'。 –

+0

嗨@Eric,我可以堅持你的前兩個解決方案。這真的有幫助! – SetV

相關問題