【问题标题】:Get a public link after uploading to Google Cloud Storage using JavaScript Client使用 JavaScript 客户端上传到 Google Cloud Storage 后获取公共链接
【发布时间】:2014-12-02 12:02:17
【问题描述】:

我使用 Google Cloud Storage JavaScript 客户端库将文件上传到 Google Cloud Storage。然后我想获得一个公共链接,我想与我的朋友分享而不需要谷歌帐户。我尝试使用 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 + '"'
          },

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

【问题讨论】:

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


    【解决方案1】:

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

    其次,x-goog-acl 是一个标头,所以它应该包含在标头中。

    【讨论】:

    • 'headers': {'x-goog-acl':'public-read', 'Content-Type': 'multipart/mixed;边界=“'+边界+'”'}对吗?非常感谢
    【解决方案2】:

    我认为您的问题涉及您将文件上传到 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 就可以匿名工作。

    【讨论】:

    • 像 'params': {'uploadType': 'multipart','predefinedAcl':'publicRead'} 这样的更新,通过您的 URL 模式运行良好。谢谢
    【解决方案3】:

    对于这个库: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']
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 2016-06-17
      相关资源
      最近更新 更多