pyCurl - 在 python 中将 Base64 格式的数据上传到 WebDav 服务器

问题描述 投票:0回答:1

我正在使用 pyCurl 和以下函数将文件上传到 WebDav 服务器:

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)

    c.setopt(pycurl.READFUNCTION, open(filename, 'rb').read)

    c.setopt(pycurl.SSL_VERIFYPEER, 0)
    c.setopt(pycurl.SSL_VERIFYHOST, 0)
    c.setopt(pycurl.USERPWD, upload_user + ":" + upload_pw)

    # Set size of file to be uploaded.
    filesize = os.path.getsize(filename)
    c.setopt(pycurl.INFILESIZE, filesize)

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

现在,我想修改函数来上传以 Base64 字节串编码的文件。我必须如何修改 read 函数

c.setopt(pycurl.READFUNCTION, open(filename, 'rb').read)
和 filsize
filesize = os.path.getsize(filename)
才能完成这项工作? Base64 字节串在变量
filedata
中提供。

作为一个字节流菜鸟,不幸的是我的尝试和错误方法没有成功......

提前致谢!

python base64 pycurl bytestream
1个回答
0
投票

您可以简单地打开文件,获取其内容并对其进行编码(要获取大小,您可以再次将其保存为临时文件,该文件将被删除并获取其大小)

类似这样的:

class customRead:
    def __init__(self, filename):
        with open(filename, 'rb') as file:
            self.data = file.read()
        
    def get(self):
        base64_data = base64.b64encode(self.data)
        return base64_data


def get_base64_size(base64_data):
    return len(base64_data)
    

然后你可以将你的读取函数更改为如下所示:#

filebase64data = customRead(文件名)

c.setopt(pycurl.READFUNCTION, filebase64data.get)

您的尺码可以用于

c.setopt(pycurl.INFILESIZE, get_base64_size(filebase64data.get()))

;)

© www.soinside.com 2019 - 2024. All rights reserved.