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

如何修改pyCurl函数实现Base64字节串上传至WebDAV服务器?

基于pyCurl上传Base64编码字节串至WebDAV的修改方案

原问题背景

原有pyCurl函数用于从本地文件读取内容上传至WebDAV服务器,现需修改为上传存储在filedata变量中的Base64编码字节串,需调整READFUNCTION及文件大小相关代码。

修改后的完整函数

import pycurl
import os
import base64
import io

def fileupload(url, filename, filedata, upload_user, upload_pw):
    # Initialize pycurl
    c = pycurl.Curl()

    url = url + filename
    c.setopt(pycurl.URL, url)
    c.setopt(pycurl.UPLOAD, 1)

    # 解码Base64字节串为原始文件字节数据
    decoded_data = base64.b64decode(filedata)
    # 将字节数据包装为类文件流对象
    data_stream = io.BytesIO(decoded_data)
    # 设置读取函数为流对象的read方法
    c.setopt(pycurl.READFUNCTION, data_stream.read)

    c.setopt(pycurl.SSL_VERIFYPEER, 0)
    c.setopt(pycurl.SSL_VERIFYHOST, 0)
    c.setopt(pycurl.USERPWD, f"{upload_user}:{upload_pw}")

    # 设置上传数据的大小为解码后字节数据的长度
    filesize = len(decoded_data)
    c.setopt(pycurl.INFILESIZE, filesize)

    # Start transfer
    c.perform()
    c.close()

关键修改点说明

  • Base64解码:filedata是Base64编码的字节串,必须先解码为原始文件的字节数据,否则服务器接收到的是编码后的无效内容。
  • 类文件流适配:使用io.BytesIO将内存中的字节数据包装成类文件对象,其read方法完全符合pycurl对READFUNCTION的要求——每次被调用时返回指定长度的字节,直到返回空串表示数据读取完毕。
  • 文件大小计算:直接使用解码后字节数据的长度len(decoded_data),替代原本地文件大小的读取逻辑,无需再访问本地文件系统。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 11:37:54