$image = $request->file('image'); //image file from frontend
$name = $image->getClientOriginalName();
$firebase_storage_path = 'notificationImage/';
$localfolder = public_path('firebase-temp-uploads') .'/';
$extension = $image->getClientOriginalExtension();
$file = $name;
if ($image->move($localfolder, $file)) {
$uploadedfile = fopen($localfolder.$file, 'r');
$storage->getBucket()->upload($uploadedfile, ['name' => $firebase_storage_path . $file]);
//will remove from local laravel folder
//unlink($localfolder . $file);
echo 'success';
} else {
echo 'error';
}
答案 0 :(得分:0)
看起来您的脚本没有设置访问令牌。正如您所了解的,Web 界面默认执行此操作。在这种情况下,检查文件元数据很有用。
您可以使用 gsutil
,这对于其他任务也非常方便。 https://cloud.google.com/storage/docs/gsutil_install
当然,您也可以使用 Google Cloud Console,它可以为您提供比 Firebase 更详细的信息。 https://console.cloud.google.com/storage/browser
这是我从网上上传的文件:
$ gsutil ls -L gs://foo.appspot.com/profiles/bar/avatar.jpg
gs://foo.appspot.com/profiles/bar/avatar.jpg:
Creation time: Sat, 20 Mar 2021 13:56:00 GMT
Update time: Sun, 21 Mar 2021 12:18:22 GMT
Storage class: STANDARD
Content-Length: 68107
Content-Type: image/jpeg
Metadata:
firebaseStorageDownloadTokens:abcd1234-e749-4473-91c9-07cf2f27ede2
Hash (crc32c): hHZfWQ==
Hash (md5): W2sIeTGeiktc6i+eDLkeqA==
ETag: CNL+y4qDv+8CEAM=
Generation: 1616248560615250
Metageneration: 3
ACL: [
{
…
元数据字段 firebaseStorageDownloadTokens
实际上包含您在 Firebase 网络用户界面中看到的相同访问令牌。
不幸的是,我不懂 PHP,但为 firebaseStorageDownloadTokens
字段生成 UUID 并在上传文件时将其添加为元数据应该相当简单。