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

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和本地文件系统的限制:

  1. 安装适配Laravel 6的Azure存储扩展:
composer require laravel/azure-storage:^1.2
  1. 在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'),
],
  1. 在.env里填入你的Azure存储账户信息:
FILESYSTEM_DRIVER=azure
AZURE_STORAGE_NAME=你的存储账户名
AZURE_STORAGE_KEY=你的存储账户密钥
AZURE_STORAGE_CONTAINER=你的容器名(比如public)
AZURE_STORAGE_URL=https://你的存储账户名.blob.core.windows.net/你的容器名
  1. 同样在Voyager配置里设置使用azure磁盘,之后所有上传的资源都会直接存储到Blob Storage,访问不会再出现破损问题。

4. 临时应急方案:手动同步文件

如果以上方案暂时无法生效,可以先手动把storage/app/public下的所有文件复制到public/storage目录,每次部署后同步一次,这是临时救急的方法,不推荐长期使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:32:41