如何用Python程序向Nextcloud匿名共享空间上传文件?
解决Nextcloud匿名上传空间的Python直接上传问题
正确的上传端点与方法
Nextcloud匿名上传(收件箱共享)的核心是使用WebDAV端点配合共享token,而非普通文件上传接口。之前的405错误通常是因为用错了HTTP方法或端点路径,200无文件则大概率是路径参数配置错误。
关键参数说明
- 共享token:从匿名上传链接中提取(如链接为
https://nc.example.com/s/abc123,token即为abc123) - 上传端点:固定为
public.php/webdav/,需拼接Nextcloud域名、目标文件名和token参数
Python实现代码
import requests # 替换为你的实际参数 SHARE_TOKEN = "abc123" NEXTCLOUD_DOMAIN = "https://your-nextcloud-site.com" LOCAL_FILE = "/home/user/docs/report.pdf" TARGET_FILENAME = "report-2024.pdf" # 构造完整上传URL upload_url = f"{NEXTCLOUD_DOMAIN}/public.php/webdav/{TARGET_FILENAME}?token={SHARE_TOKEN}" # 必要请求头,避免Nextcloud拦截非浏览器请求 headers = {"X-Requested-With": "XMLHttpRequest"} with open(LOCAL_FILE, "rb") as file_obj: resp = requests.put(upload_url, data=file_obj, headers=headers) # 响应判断 if resp.status_code in (201, 204): print("上传成功") else: print(f"失败,状态码: {resp.status_code}") print(resp.text)
问题排查要点
- 405错误:确认使用
PUT方法而非POST,Nextcloud WebDAV上传仅接受PUT请求 - 200无文件:检查token是否正确、文件名是否拼在
webdav/路径后(而非作为参数)、共享是否开启“允许上传”权限 - 若上传大文件,可添加
Content-Length头或启用requests的分块上传(stream=True)
内容的提问来源于stack exchange,提问作者tfv
相关产品推荐
相关产品推荐

