Laravel使用laravel-google-cloud-storage包遇NotFoundException求助
解决Laravel使用laravel-google-cloud-storage上传时的NotFoundException
嘿,我之前在Laravel里用这个Google Cloud Storage包的时候也碰到过一模一样的NotFoundException,结合你给出的配置信息,咱们一步步排查解决:
1. 先揪出最容易犯的低级错误:拼写问题
你.env里写的GOOGLE_CLOUD_KEY_FILE=/var/www/project/credintials.json,注意!是credentials不是credintials——这个拼写错误会直接导致Laravel找不到凭证文件,进而触发NotFoundException。先把文件名和路径的拼写改对,这是很多人踩过的坑。
2. 验证存储桶的存在与权限
- 打开Google Cloud Console,确认你的存储桶
minisite_event确实存在,并且它所属的项目ID和你.env里的GOOGLE_CLOUD_PROJECT_ID='myproject-123456'完全一致(GCS的项目ID和存储桶名大小写敏感,别打错字)。 - 检查服务账号权限:打开你的JSON凭证文件,找到
client_email字段,去Google Cloud IAM控制台搜索这个邮箱,确认它被授予了Storage Object Creator或者Storage Admin的权限。没有权限的话,即使存储桶存在,服务账号也看不到它,会返回“找不到”的错误。
3. 确保凭证文件的权限正确
Laravel的运行用户(通常是www-data)需要能读取你的JSON凭证文件,否则会因为权限不足读不到凭证,间接导致存储桶“找不到”的错误。可以通过以下命令调整权限:
chmod 644 /var/www/project/credentials.json chown www-data:www-data /var/www/project/credentials.json
4. 检查Laravel文件系统配置
打开config/filesystems.php,确认你已经正确配置了GCS磁盘:
'disks' => [ // ... 其他磁盘配置(比如local、public) 'gcs' => [ 'driver' => 'gcs', 'project_id' => env('GOOGLE_CLOUD_PROJECT_ID'), 'key_file' => env('GOOGLE_CLOUD_KEY_FILE'), 'bucket' => env('GOOGLE_CLOUD_STORAGE_BUCKET'), 'path_prefix' => env('GOOGLE_CLOUD_STORAGE_PATH_PREFIX', ''), ], ],
同时,确保你上传文件的代码里指定了gcs磁盘,比如:
// 正确的写法 Storage::disk('gcs')->put('uploads/avatar.jpg', $fileContent); // 错误的写法(用了默认磁盘,比如local) Storage::put('uploads/avatar.jpg', $fileContent);
5. 清除Laravel配置缓存
有时候Laravel会缓存旧的.env配置,导致新的修改不生效。运行以下命令清除缓存:
php artisan config:clear php artisan cache:clear
6. 快速测试连接
可以写一个简单的测试路由来验证GCS连接是否正常:
Route::get('/test-gcs-connection', function () { $disk = Storage::disk('gcs'); // 尝试检查一个测试文件是否存在,不管结果如何,都能验证连接是否正常 dd($disk->exists('test-file.txt')); });
访问这个路由,如果还是报错,那大概率是凭证或者权限的问题,回到步骤2和3再仔细检查。
内容的提问来源于stack exchange,提问作者Ariful Haque
相关产品推荐
相关产品推荐

