【问题标题】:PHP: Uploading public files to a folder inside a Google storage bucketPHP:将公共文件上传到 Google 存储桶内的文件夹
【发布时间】:2016-04-09 07:55:03
【问题描述】:

很抱歉这个菜鸟问题,但这是一个我似乎无法解决的问题。我有一个 laravel 脚本可以将文件公开上传到谷歌存储桶,它工作正常。问题是我上传的对象就在存储桶内,它应该放在存储桶内的目录中。例如 bucket - /dev-bucket/ ,正确的目录 - /dev-bucket/media/ 下面是我的脚本

            $client = new \Google_Client();
            $credential = new \Google_Auth_AssertionCredentials(
            'xxxxxx@appspot.gserviceaccount.com',
            ['https://www.googleapis.com/auth/devstorage.full_control'],
            file_get_contents(storage_path().'xxxxx.p12')
        );
        $client->setAssertionCredentials($credential);

        // this access control is for project owners
        $ownerAccess = new \Google_Service_Storage_ObjectAccessControl();
        $ownerAccess->setEntity('project-owners-' . 'xxxxxxxxxxx');
        $ownerAccess->setRole('OWNER');

        // this access control is for public access
        $readerAccess = new \Google_Service_Storage_ObjectAccessControl();
        $readerAccess->setEntity('allUsers');
        $readerAccess->setRole('READER');

        $storage = new \Google_Service_Storage($client);
        $obj = new \Google_Service_Storage_StorageObject();
        $obj->setName($stageFileName);
        $obj->setAcl([$ownerAccess, $readerAccess]);

        $storage->objects->insert(
            Config::get('constants.bucket'),
            $obj,
            [
                'name'          => $stageFileName,
                'data'          => file_get_contents($stageFile),
                'uploadType'    => 'media',
            ]
        );

是否有关于如何将对象放入存储桶内的目录的选项?

【问题讨论】:

    标签: php laravel google-api google-cloud-storage


    【解决方案1】:

    您应该可以通过将要上传的对象的文件名与要上传的存储桶中的目录前置来上传目录中的文件。例如,如果您的存储桶中有一个名为 dev 的目录,您的文件名应该以 'dev/{fileToBeUploaded}.txt'

    开头

    【讨论】:

    • 非常感谢。我到处找这个。
    【解决方案2】:

    要将文件上传到谷歌存储桶中的特定文件夹,我编写了以下代码:

    Blob blob=
    storage.create(BlobInfo.newBuilder(bucketName,"folder_name/"+f.getName()).setAcl(acls).build(),f.getInputStream());
    

    对于从该文件夹下载:

    BlobId blobId = BlobId.of(bucketName, vendorName+"/"+fileName);
    Blob blob = storage.get(blobId);
    

    附:这是在 JAVA 中,可以用任何其他语言做类似的事情。

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-11
      • 2020-03-16
      • 1970-01-01
      相关资源
      最近更新 更多