Spatie Laravel-Medialibrary生产环境临时URL返回404无法使用问题
我碰到过好几个开发者遇到类似的问题——本地调试时私有媒体文件的临时URL完全正常,一部署到生产环境就直接报404。结合你给出的配置信息,咱们一步步来排查解决:
先检查服务器存储目录权限
生产环境下,storage/app/private/media_inf(你配置的磁盘根目录)的权限是重灾区。一定要确保web服务器的运行用户(比如Nginx/Apache常用的www-data)对这个目录有读写权限。可以执行以下命令快速修复权限(根据你的服务器实际用户调整):chown -R www-data:www-data storage/ chmod -R 755 storage/确认APP_KEY的一致性
临时URL是通过Laravel签名路由生成的,签名的有效性完全依赖.env里的APP_KEY。如果生产环境的APP_KEY和本地不一致,或者部署时没正确配置,会直接导致签名验证失败返回404。检查你的生产环境.env,确保APP_KEY是正确的,修改后记得重启web服务器。补全并验证文件系统配置
你给出的filesystems.php里的media_info配置看起来没写完,完整的私有磁盘配置应该包含visibility参数,示例如下:'media_info' => [ 'driver' => 'local', 'root' => storage_path('app/private/media_info'), 'visibility' => 'private', // 关键!私有文件必须设置为private ],同时要确认
config/media-library.php里,是否把这个磁盘设为默认私有磁盘,或者你在关联媒体时明确指定了使用media_info磁盘。排查路由缓存问题
如果生产环境执行过php artisan route:cache,要确保Medialibrary的自动注册路由被正确缓存进去。可以先清除路由缓存试试:php artisan route:clear测试临时URL恢复正常后,下次缓存路由前要确保Medialibrary的路由已被正确加载。
核对临时URL生成代码
最后检查你生成临时URL的代码,确保磁盘名称拼写正确,比如:// 确保第二个参数是你配置的磁盘名"media_info" $mediaItem->getTemporaryUrl(now()->addMinutes(30), 'media_info');
备注:内容来源于stack exchange,提问作者haresh mathukiya

