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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 23:10:56