使用Python脚本在Nextcloud上传文件并生成公开分享链接
用Python命令行实现Nextcloud文件上传并获取公开分享链接
同步实现方案
依赖准备
先安装requests库:
pip install requests
代码实现
import requests import argparse def upload_to_nextcloud_and_get_share(nextcloud_url, username, password, local_file_path, remote_dir): # 处理远程文件路径 remote_file_path = f"{remote_dir}/{local_file_path.split('/')[-1]}" dav_url = f"{nextcloud_url}/remote.php/dav/files/{username}/{remote_file_path}" # 上传文件(调用Nextcloud WebDAV API) with open(local_file_path, 'rb') as f: response = requests.put( dav_url, auth=(username, password), data=f ) response.raise_for_status() print(f"文件已上传至Nextcloud路径: {remote_file_path}") # 创建公开分享链接(调用Nextcloud分享API) share_api_url = f"{nextcloud_url}/ocs/v2.php/apps/files_sharing/api/v1/shares" headers = {'OCS-APIRequest': 'true'} payload = { 'path': remote_file_path, 'shareType': 3, # 3代表公开链接分享类型 'permissions': 1 # 1代表只读权限,可按需调整 } share_response = requests.post( share_api_url, auth=(username, password), headers=headers, data=payload ) share_response.raise_for_status() # 提取并返回分享链接 share_data = share_response.json() share_link = share_data['ocs']['data']['url'] print(f"生成的公开分享链接: {share_link}") return share_link if __name__ == "__main__": parser = argparse.ArgumentParser(description='上传文件到Nextcloud并生成公开分享链接') parser.add_argument('--url', required=True, help='Nextcloud服务器地址,示例:https://your-nextcloud.com') parser.add_argument('--user', required=True, help='Nextcloud用户名') parser.add_argument('--pass', required=True, help='Nextcloud密码或应用密码') parser.add_argument('--file', required=True, help='本地待上传文件的完整路径') parser.add_argument('--remote-dir', required=True, help='Nextcloud目标目录,示例:/Shared/Uploads') args = parser.parse_args() upload_to_nextcloud_and_get_share( args.url, args.user, args.pass, args.file, args.remote_dir )
使用方式
在命令行执行:
python nextcloud_upload.py --url https://your-nextcloud-instance.com --user your_username --pass your_app_password --file /path/to/local/file.txt --remote-dir /Documents/Uploads
异步实现方案
依赖准备
安装aiohttp库:
pip install aiohttp
代码实现
import aiohttp import argparse import asyncio async def upload_to_nextcloud_and_get_share(nextcloud_url, username, password, local_file_path, remote_dir): remote_file_path = f"{remote_dir}/{local_file_path.split('/')[-1]}" dav_url = f"{nextcloud_url}/remote.php/dav/files/{username}/{remote_file_path}" # 异步会话处理上传与分享请求 async with aiohttp.ClientSession(auth=aiohttp.BasicAuth(username, password)) as session: # 异步上传文件 with open(local_file_path, 'rb') as f: async with session.put(dav_url, data=f) as response: response.raise_for_status() print(f"文件已上传至Nextcloud路径: {remote_file_path}") # 异步创建公开分享 share_api_url = f"{nextcloud_url}/ocs/v2.php/apps/files_sharing/api/v1/shares" headers = {'OCS-APIRequest': 'true'} payload = { 'path': remote_file_path, 'shareType': 3, 'permissions': 1 } async with session.post(share_api_url, headers=headers, data=payload) as share_response: share_response.raise_for_status() share_data = await share_response.json() share_link = share_data['ocs']['data']['url'] print(f"生成的公开分享链接: {share_link}") return share_link if __name__ == "__main__": parser = argparse.ArgumentParser(description='异步上传文件到Nextcloud并生成公开分享链接') parser.add_argument('--url', required=True, help='Nextcloud服务器地址') parser.add_argument('--user', required=True, help='Nextcloud用户名') parser.add_argument('--pass', required=True, help='Nextcloud密码或应用密码') parser.add_argument('--file', required=True, help='本地待上传文件的完整路径') parser.add_argument('--remote-dir', required=True, help='Nextcloud目标目录') args = parser.parse_args() asyncio.run(upload_to_nextcloud_and_get_share( args.url, args.user, args.pass, args.file, args.remote_dir ))
使用方式
与同步版本命令格式一致:
python nextcloud_upload_async.py --url https://your-nextcloud-instance.com --user your_username --pass your_app_password --file /path/to/local/file.txt --remote-dir /Documents/Uploads
关键注意事项
- 优先使用Nextcloud应用密码替代用户密码,可在个人设置中生成,安全性更高。
- 确保目标用户拥有Nextcloud目标目录的写入权限,且服务器已开启文件分享功能。
permissions参数可按需调整:1=只读,2=编辑,4=上传,6=编辑+上传等。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

