使用JavaScript客户端上传到Google云端存储后获取公共链接

时间:2014-12-02 12:02:17

标签: google-app-engine google-cloud-storage

我使用Google云端存储JavaScript客户端库将文件上传到Google云端存储。然后,我希望获得一个公开链接,我想与朋友分享而无需Google帐户。我尝试使用insertObject重用the JavaScript example作为以下代码:

 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 + '"'
          },

在我的Google云端存储分区(myphoto_upload)中成功上传。但我无法通过https://storage.cloud.google.com/myphoto_upload/brv_brown.png访问。我尝试用'x-goog-acl','public-read'替换'acl' : [{'entity': 'allUsers', 'role': 'READER'}],         或'body':{'entity': 'allAuthenticatedUsers', 'role': 'READER'},但结果是一样的。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

首先,你有一个错字。在:之后,它应该是,而不是x-goog-acl

其次,x-goog-acl是标题,因此它应该包含在标题中。

答案 1 :(得分: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就可以匿名工作。

答案 2 :(得分: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']
);