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

Symfony应用上传文件至映射网络驱动器遇404错误求助

解决Symfony中WebDAV上传OneDrive返回404的问题

核心问题分析

  • Write方法路径错误:你已在Client的baseUri中指定OneDrive的WebDAV根地址,但调用filesystem->write()时又传入完整URL,导致最终请求路径变为https://d.docs.live.net/6A3F6B58197AC1EC/https://d.docs.live.net/6A3F6B58197AC1EC/file.txt,属于无效路径直接触发404。
  • 认证方式过时:当前OneDrive不再支持用户名密码的WebDAV基本认证,必须使用OAuth2令牌,传统认证会导致权限验证失败,服务器常返回404混淆实际问题。

修复步骤

1. 修正Write方法的路径

将write的第一个参数改为相对路径,由WebDAVAdapter自动拼接baseUri:

try {
    $filesystem->write("file.txt", "I am a boy");
} catch (FilesystemException | UnableToReadFile $exception) {
    dd($exception);
}

2. 替换为OAuth2认证

第一步:获取OAuth2访问令牌

需通过Microsoft Graph API完成授权流程:

  • 在Azure门户注册应用,获取客户端ID和密钥
  • 引导用户授权获取授权码
  • 用授权码换取访问令牌和刷新令牌

第二步:配置客户端认证

用OAuth2令牌替换原用户名密码配置:

$client = new Client([
    'baseUri' => "https://d.docs.live.net/6A3F6B58197AC1EC/",
    'headers' => [
        'Authorization' => 'Bearer ' . $accessToken, // 替换为实际访问令牌
    ],
]);

3. 验证WebDAV端点正确性

个人OneDrive的WebDAV地址格式为https://d.docs.live.net/<你的OneDrive ID>/,可通过Microsoft Graph API的/me/drive端点获取webDavUrl字段确认准确地址。

额外注意事项

  • 确保Azure应用已申请Files.ReadWrite等OneDrive操作权限
  • 令牌过期后需用刷新令牌重新获取新令牌
  • 可先用curl命令验证WebDAV连接有效性:
curl -X PUT -H "Authorization: Bearer <access-token>" -d "test content" https://d.docs.live.net/6A3F6B58197AC1EC/test.txt

内容的提问来源于stack exchange,提问作者Ben Josiah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:03:27