Alist挂载多网盘实现统一上传文件生成直链搭建教程
本文基于Windows 11环境,演示如何使用AList挂载两个WebDAV存储源,验证目录读取与文件写入权限,并通过API获取文件直链。重点解决“能看不能传”及“直链时效性”问题,提供PowerShell调用模板与权限排查思路。
AList 能把多个分散的存储源聚合成一个统一的文件视图,但它不会自动把只读分享链接变成可写空间,也不会把所有临时下载地址固化为永久直链。搭建的核心不在于安装软件,而在于厘清“目录能否列出”、“文件能否写入”以及“地址如何交付”这三个因果环节。只有在每个存储源上独立验证了写入能力,后续的自动化调用才具备基础。
本教程以 Windows 11 x64 系统为例,使用 AList 3.x 版本,挂载两个已开通 WebDAV 且具备写入权限的云盘作为示例。挂载路径分别设为 /cloud-a 和 /cloud-b,并通过小文件 check.txt 进行全流程验证。
服务启动与存储挂载
从 AList 官方 Release 页面下载适用于 Windows x64 的压缩包,解压至固定目录,如 D:\AList。确认目录中包含 alist.exe 文件。在该目录下打开 PowerShell,执行以下命令启动服务:
.\alist.exe server
保持该窗口运行,不要关闭。在浏览器中访问 http://127.0.0.1:5244。首次运行时,终端会输出初始管理员账号和密码,请妥善记录。若需重置密码,需先停止服务(Ctrl+C),然后在同一目录执行:
.\alist.exe admin random
记录新生成的密码后,再次执行 server 启动服务。切勿在不同工作目录重复初始化,以免产生多套互不兼容的配置数据。
登录管理后台,进入【存储】页面,点击【添加】。驱动选择【WebDAV】,挂载路径填写 /cloud-a。在配置项中,填入云盘提供的 WebDAV 根地址、用户名及密码(或应用专用密码)。注意,这里的“根文件夹路径”是指远端 WebDAV 服务器上的目录结构,而非本地 Windows 磁盘路径。
保存后,返回文件列表页,进入 /cloud-a 目录,确认能正常列出远端文件。接着以相同方式添加第二个存储,挂载路径设为 /cloud-b,对应第二个云盘的凭据。务必确保两个挂载路径唯一,避免冲突。
需要强调的是,挂载成功仅意味着读取链路通畅。如果云盘端账号为只读权限,或指定目录禁止写入,AList 前端虽能显示文件,但无法执行上传操作。对于 OneDrive、阿里云盘等原生驱动,需遵循其特定的 OAuth 授权流程,不可直接套用 WebDAV 的账号字段。

服务启动与存储挂载
上传验证与权限排查
在本地创建一个名为 check.txt 的小文件,写入内容 “alist upload check”。在 AList 文件列表中,先进入 /cloud-a 对应的具体目录,再点击页面上的上传按钮选择该文件。
AList 的聚合视图并不具备自动分发上传功能。在根目录看到多个存储名称,不代表上传操作会同步到所有网盘。必须进入具体的挂载子目录发起上传,文件才会写入对应的存储源。
上传完成后,刷新页面检查文件名与大小。随后,登录云盘 A 的官方网页或客户端,查看同一目录下是否存在 check.txt。对 /cloud-b 重复此步骤,确保两条写入链路均通过物理验证。
若出现“能浏览但不能上传”的情况,需排查两层权限:一是 AList 当前登录用户在该路径下是否拥有【创建目录】或【上传】的角色权限;二是云盘服务端账号对该目录是否开放写入权限。在生产环境中,不应为了便利而向游客开放全站写入权限,应通过角色作用域精确控制。
此外,若部署了反向代理,上传大文件时可能出现 HTTP 413 错误。这通常是代理层的请求体大小限制所致,而非云盘不支持上传。建议先使用小文件在本地直连地址(127.0.0.1)测试,排除网络入口层面的干扰。

上传验证与权限排查
直链获取与调用逻辑
文件上传成功后,浏览器地址栏中的 URL 通常用于预览,并非稳定的文件内容地址。自动化程序应通过 AList 提供的 API 接口 /api/fs/get 查询文件信息,并从响应中提取 raw_url。
以下是一个基于 PowerShell 的调用模板,用于获取 /cloud-a/check.txt 的直链。运行前请确保文件已存在,并根据提示输入 AList 管理员账号密码。若启用了两步验证,还需输入 OTP 代码。
$base = 'http://127.0.0.1:5244'
$credential = Get-Credential -Message 'AList account'
$clientId = [guid]::NewGuid().ToString()
$headers = @{ 'Client-Id' = $clientId }
# 构造登录请求体
$loginBody = @{
username = $credential.UserName
password = $credential.GetNetworkCredential().Password
otp_code = (Read-Host 'OTP code, or leave empty')
} | ConvertTo-Json
# 执行登录并获取 Token
$login = Invoke-RestMethod -Method Post -Uri "$base/api/auth/login" -Headers $headers -ContentType 'application/json' -Body ([Text.Encoding]::UTF8.GetBytes($loginBody))
if ($login.code -ne 200) { throw $login.message }
# 设置认证头
$headers.Authorization = $login.data.token
# 查询文件信息
$body = @{ path = '/cloud-a/check.txt'; password = '' } | ConvertTo-Json
$info = Invoke-RestMethod -Method Post -Uri "$base/api/fs/get" -Headers $headers -ContentType 'application/json' -Body ([Text.Encoding]::UTF8.GetBytes($body))
if ($info.code -ne 200) { throw $info.message }
if ($info.data.is_dir) { throw 'Expected a file' }
# 输出直链地址
$info.data.raw_url
如果目标目录设置了访问密码,需在第二个请求的 password 字段中填入相应密码。成功响应中,code 为 200 时,data.raw_url 即为文件直链。若返回错误,应解析 message 字段定位问题,而非直接使用错误页面作为下载源。
需要注意的是,raw_url 可能指向上游网盘的临时地址,也可能指向 AList 的代理路径,这取决于驱动类型和 Web 代理配置。部分上游地址带有签名参数或有效期,过期后需重新通过 AList API 查询获取。因此,不能承诺一次获取的地址永久有效,调用方应具备重试机制。
本例中的 127.0.0.1 仅限本机访问。若需供其他设备调用,必须配置公网可达的服务地址、HTTPS 证书及相应的访问控制策略,并在外部网络环境中实际验证连通性。统一多网盘的价值在于标准化路径与权限管理,唯有在每个环节都经过独立验证,才能确保“所见即所得,所取即可用”。

直链获取与调用逻辑
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













