Azure上Laravel 6应用存储磁盘配置及Voyager面板图片异常求助
解决Azure Windows Web Apps上Laravel 6 + Voyager存储资源无法访问的问题
我之前也踩过Azure Windows环境不支持symlink的坑,结合你的尝试,给你几个可行的解决思路:
1. 修正自定义本地磁盘的配置
你之前定义的azure磁盘路径有问题,Windows下手动写相对路径容易出错,建议用Laravel的辅助函数生成路径,跨平台更稳定:
'azure' => [ 'driver' => 'local', 'root' => public_path('storage'), // 直接指向public/storage目录 'url' => env('APP_URL').'/storage', 'visibility' => 'public', ]
同时必须让Voyager指定使用这个磁盘:打开config/voyager.php,找到storage配置块,把disk值改成azure:
'storage' => [ 'disk' => 'azure', ],
或者直接在.env里添加VOYAGER_FILESYSTEM_DISK=azure,确保Voyager的上传和读取操作都绑定到这个自定义磁盘。
2. 检查Azure虚拟目录配置是否正确
如果坚持用虚拟目录方案,确认你在Azure门户的配置细节:
- 进入Web App -> 配置 -> 路径映射
- 添加虚拟目录:虚拟路径填
/storage,物理路径填storage/app/public(注意是相对于site\wwwroot的相对路径,不需要带site\wwwroot前缀) - 保存配置后重启Web App,确保映射规则生效
3. 切换到Azure Blob Storage(推荐云原生方案)
既然部署在Azure上,直接用Blob Storage替代本地存储是最稳定的方案,完全避开symlink和本地文件系统的限制:
- 安装适配Laravel 6的Azure存储扩展:
composer require laravel/azure-storage:^1.2
- 在
config/filesystems.php里添加Blob Storage驱动配置:
'azure' => [ 'driver' => 'azure', 'name' => env('AZURE_STORAGE_NAME'), 'key' => env('AZURE_STORAGE_KEY'), 'container' => env('AZURE_STORAGE_CONTAINER'), 'url' => env('AZURE_STORAGE_URL'), ],
- 在
.env里填入你的Azure存储账户信息:
FILESYSTEM_DRIVER=azure AZURE_STORAGE_NAME=你的存储账户名 AZURE_STORAGE_KEY=你的存储账户密钥 AZURE_STORAGE_CONTAINER=你的容器名(比如public) AZURE_STORAGE_URL=https://你的存储账户名.blob.core.windows.net/你的容器名
- 同样在Voyager配置里设置使用
azure磁盘,之后所有上传的资源都会直接存储到Blob Storage,访问不会再出现破损问题。
4. 临时应急方案:手动同步文件
如果以上方案暂时无法生效,可以先手动把storage/app/public下的所有文件复制到public/storage目录,每次部署后同步一次,这是临时救急的方法,不推荐长期使用。
内容的提问来源于stack exchange,提问作者Janine Hempy
相关产品推荐
相关产品推荐

