2014-12-02 60 views
1

我使用Google雲端存儲JavaScript客戶端庫將文件上傳到Google雲端存儲。然後,我希望獲得我想與朋友分享的公共鏈接,而無需使用Google帳戶。我試着用insertObject重用the JavaScript example如下面的代碼:使用JavaScript客戶端上傳到Google Cloud Storage後獲取公共鏈接

var request = gapi.client.request({ 
      'path': '/upload/storage/' + API_VERSION + '/b/' + BUCKET + '/o', 
      'method': 'POST', 
      'params': {'uploadType': 'multipart'}, 
      'x-goog-acl','public-read', 
      'headers': { 
      'Content-Type': 'multipart/mixed; boundary="' + boundary + '"' 
      }, 

上傳成功地在我的谷歌雲存儲桶(myphoto_upload)。但我無法通過https://storage.cloud.google.com/myphoto_upload/brv_brown.png訪問。我試圖用'acl' : [{'entity': 'allUsers', 'role': 'READER'}],'body':{'entity': 'allAuthenticatedUsers', 'role': 'READER'}替換'x-goog-acl','public-read',但結果是一樣的。感謝您的幫助提前。

回答

0

首先,你有一個錯字。它應該是:而不是,x-goog-acl

其次,x-goog-acl是一個標題,所以它應該包含在標題中。

+0

'頭':{ 'X-goog-ACL': '公讀', '內容類型':「多部分/混合; boundary =「'+ boundary +'」'} 是不是?非常感謝 – 2014-12-02 17:14:45

1

我認爲你的問題涉及你上傳一個文件到GCS,然後讓其他人下載一個文件。如果您要求其他人匿名上傳文件到您的存儲桶,那是另一回事。如果我誤解了,請告訴我。

如果你使用程序生成公共鏈接對象,最簡單的方法是隻使用這兩個URL模式之一:

https://storage.googleapis.com/myphoto_upload/brv_brown.png 
https://myphoto_upload.storage.googleapis.com/brv_brown.png 

或者,如代碼:

"https://storage.googleapis.com/" + bucket_name + "/" + object_name 

只要ACL包含allUsers:READER,這些URL可以匿名工作。

+1

的更新,如'params':{'uploadType':'multipart','predefinedAcl':'publicRead'},通過您的網址模式運行良好。謝謝 – 2014-12-03 10:20:21

0

對於這個庫:https://github.com/GoogleCloudPlatform/google-cloud-php#google-cloud-storage-ga

用途如下:

use Google\Cloud\Storage\StorageClient; 

$storage = new StorageClient([ 
    'projectId' => '123456789' // use your own project ID 
]); 

//this can be created with other ENV mode server side 
putenv('GOOGLE_APPLICATION_CREDENTIALS='.dirname(__FILE__) . '/gauth.json'); 

/* 
* For public access : 
* https://storage.googleapis.com/[BUCKET_NAME]/[FILE_NAME].png 
*/ 
$bucket->upload(
    fopen('data3.txt', 'r'), ['predefinedAcl' => 'publicRead'] 
); 
相關問題