2012-10-02 118 views
0

我試圖通過PUT方法將文件上傳到自己的桶,但不能得到它的工作:上傳文件到谷歌雲存儲由JavaScript

function upload(url, data) { 
    var pd = new XMLHttpRequest(); 
    pd['open']('PUT', "http://storage.googleapis.com/" + url, true); 
    pd['setRequestHeader']('Content-type', 'text/html'); 
    pd['setRequestHeader']('x-goog-acl', 'public-read'); 
    pd['setRequestHeader']('Authorization', 'Bearer *********F0aIu4NbTd6A'); 
    pd['setRequestHeader']('Content-length', data['length']); 
    pd['setRequestHeader']('Connection', 'close'); 
    pd['send'](data); 
} 
upload('bucked/index.html','<b>hello</b>'); 
+0

您能否提供錯誤詳情?此外,你所要求的存儲桶是「反駁」 - 是一個錯字?使用命令'gsutil ls gs:// bucked'來檢查該桶是否已經存在可能是值得的。 –

+0

你應該嘗試S3。 GS只是副本(雖然不是很好)。 – themihai

回答

0

這將是更有幫助,如果你能告訴我們如何PUT操作失敗。您是否嘗試上傳到commondatastorage.googleapis.com而不是storage.googleapis.com?

+0

他們的服務器沒有根據需要響應第一個OPTIONS請求 – user1031143

+0

XMLHttpRequest無法加載http://commondatastorage.googleapis.com/**。 Access-Control-Allow-Origin不允許使用原始http://www.**.net。 – user1031143

+1

這應該是評論,而不是答案。 –

2

錯誤似乎表明CORS未設置爲您的存儲桶。

+0

爲能夠設置CORS設置,我需要使用PUT方法,以便能夠使用PUT請求我需要使用PUT請求,我不能使用:) – user1031143

+0

您可以使用gsutil(gsutil setcors命令)設置CORS, – Navneet

1

我有類似的問題:

request.setRequestHeader('x-goog-acl', 'public-read'); 
request.setRequestHeader('Authorization', 'Bearer ' + access_token); 
request.setRequestHeader("X-File-Name", file.name); 
request.setRequestHeader("X-File-Size", file.size);. 
  1. 設置適當的原點
  2. 添加響應標頭(同您的要求)[ 「授權」, 「內容類型」,「X-文件級名稱」, 「X-文件大小」, 「X-goog-ACL」]
  3. PUT和OPTIONS方法 我找到解決這個doc

樣品cors.json

[ 
    { 
     "origin": ["*", "http://localhost:8080", "https://localhost:8080"], 
     "responseHeader": ["authorization", "content-type", "x-file-name", "x-file-size", "x-goog-acl"], 
     "method": ["GET", "HEAD", "DELETE", "PUT", "OPTIONS"], 
     "maxAgeSeconds": 3600 
    } 
] 

要設置該配置使用gsutil CORS設置cors.json GS:// your_bucket

PS。連接和Content-lenght不是必需的,JS會向控制檯拋出一些錯誤。

相關問題