You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中读取Google Cloud Storage中的私有文件?

Laravel访问Google Cloud Storage私有文件的解决方案

第一步:配置GCS文件系统驱动

  • 首先安装GCS适配扩展包,执行命令:composer require league/flysystem-google-cloud-storage
  • 把你持有的cide.json服务账号密钥文件放到项目的storage/app/目录下,禁止放在public可访问目录,避免密钥泄露
  • 修改config/filesystems.php配置文件,新增GCS磁盘配置项:
'disks' => [
    // 原有其他磁盘配置保留
    'gcs' => [
        'driver' => 'gcs',
        'project_id' => env('GOOGLE_CLOUD_PROJECT_ID', '你的GCP项目ID'),
        'key_file' => storage_path('app/cide.json'),
        'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET', '你的GCS存储桶名称'),
        'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', null),
        'storage_api_uri' => env('GOOGLE_CLOUD_STORAGE_API_URI', null),
    ],
]
  • 在项目.env文件中补充对应的GCP项目ID、存储桶名称参数即可完成配置

第二步:生成私有文件临时访问URL(推荐方案)

私有文件不支持直接公开访问,你可以通过Laravel自带的Storage门面生成带签名的临时访问URL,有效期内可直接用于前端图片、视频资源的加载展示,示例代码:

use Illuminate\Support\Facades\Storage;

// 从本地数据库读取你存储的对应文件名
$filename = '用户上传的媒体文件名.png';
// 生成1小时有效期的临时访问链接
$accessUrl = Storage::disk('gcs')->temporaryUrl(
    $filename,
    now()->addHour()
);

前端直接将生成的$accessUrl赋值给img标签的src属性、video标签的src属性即可正常加载资源。

可选方案:Laravel代理访问私有文件

如果需要在返回媒体资源前做额外的权限校验(比如判断当前用户是否为该资源的所有者),可以使用代理访问方案:

  1. 新增路由:
Route::get('/media/{filename}', [MediaController::class, 'show'])->middleware('auth');
  1. 控制器逻辑示例:
public function show($filename)
{
    // 权限校验:判断当前文件是否属于登录用户
    $media = Media::where('filename', $filename)->where('user_id', auth()->id())->firstOrFail();
    // 读取GCS文件内容
    $fileContent = Storage::disk('gcs')->get($filename);
    // 获取文件MIME类型
    $mimeType = Storage::disk('gcs')->mimeType($filename);
    // 返回媒体资源响应
    return response($fileContent, 200, [
        'Content-Type' => $mimeType,
        'Content-Disposition' => 'inline; filename="'.$filename.'"'
    ]);
}

注意事项

  • cide.json为GCP服务账号权限凭证,禁止提交到代码仓库,禁止对外泄露
  • 临时URL有效期可根据业务需求调整,不建议设置过长避免资源被未授权访问
  • 大体积视频文件优先使用临时URL方案,代理访问会占用Laravel服务器带宽,高并发场景下性能表现较差

内容的提问来源于stack exchange,提问作者Dmitryadam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 17:15:00