在Laravel中使用自动生成的访问令牌将图像上传到Firebase存储桶

时间:2020-10-13 10:12:58

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

我遵循此link将图片上传到Firebase存储,这些图片已上传到存储中。但是,要查看图像,我必须在存储中的图像内部手动生成访问令牌。我希望有什么办法可以从我的代码为该特定图像自动生成访问令牌。

下面是我上传图片的代码

$factory = (new Factory)->withServiceAccount(__DIR__.'/myfirebase.json');
$storage = $factory->createStorage();
$image = $request->file('image');

$localfolder = public_path('firebase-temp-uploads') .'/';

if (!file_exists($localfolder)) {
    mkdir($localfolder, 0777, true);
}

$extension  = $image->getClientOriginalExtension();

$file = $shopId. '.' . $extension;

if ($image->move($localfolder, $file)) {
    $uploadedfile = fopen($localfolder.$file, 'r');
    $storage->getBucket()->upload($uploadedfile, [
        'name' => 'categories/'.$file,
        // 'predefinedAcl' => 'PUBLICREAD',
    ]);
    unlink($localfolder . $file);
}

我尝试使用'predefinedAcl' => 'PUBLICREAD',但是它无法正常工作,并且存储中的手动创建的访问令牌不再可用

1 个答案:

答案 0 :(得分:0)

没有为通过服务器端SDK上传到Cloud Storage的文件生成下载URL。

您有两种选择可以使用自己的代码为这些文件生成可公开访问的网址:

  1. 生成所谓的signed URL,它可能是来自服务器端代码的 。格式将与Firebase的下载URL不同,但是签名的URL还可以提供公共的只读访问权限。

  2. 自行设置上载文件的必要access token in the metadata。请注意,这不是文档化的API,因此尽管它似乎现在对许多开发人员都有效,但它可能会在某些时候停止工作。