PHP:将公共文件上传到Google存储桶中的文件夹

时间:2016-04-09 07:55:04

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

抱歉这个noob问题,但这是一个我似乎无法破解的问题。我有一个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',
            ]
        );

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

2 个答案:

答案 0 :(得分:3)

您应该能够通过预先挂起要上传的对象的文件名以及要上载的目录来上传目录中的文件。例如,如果您的存储桶中有一个名为dev的目录,则您的文件名应以'dev / {fileToBeUploaded} .txt'开头

答案 1 :(得分:0)

要将文件上传到Google存储桶中的特定文件夹,我在下面写了代码:

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);

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