PHP:正在将 public 文件上传到 Google 存储桶内的文件夹
PHP: Uploading public files to a folder inside a Google storage bucket
抱歉这个菜鸟问题,但这是一个我似乎无法破解的问题。我有一个 laravel 脚本可以将文件公开上传到 google 存储桶并且它工作正常。问题是我上传的对象就在桶内,它应该放在桶内的目录内。例如 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',
]
);
是否有关于如何将对象放入存储桶内目录的选项?
您应该可以通过在要上传的对象的文件名前加上要上传的存储桶中的目录来上传目录中的文件。例如,如果您的存储桶中有一个名为 dev 的目录,您的文件名应以 'dev/{fileToBeUploaded}.txt'
开头
要将文件上传到 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,可以用任何其他语言做类似的事情。
抱歉这个菜鸟问题,但这是一个我似乎无法破解的问题。我有一个 laravel 脚本可以将文件公开上传到 google 存储桶并且它工作正常。问题是我上传的对象就在桶内,它应该放在桶内的目录内。例如 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',
]
);
是否有关于如何将对象放入存储桶内目录的选项?
您应该可以通过在要上传的对象的文件名前加上要上传的存储桶中的目录来上传目录中的文件。例如,如果您的存储桶中有一个名为 dev 的目录,您的文件名应以 'dev/{fileToBeUploaded}.txt'
开头要将文件上传到 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,可以用任何其他语言做类似的事情。