3

我在从某个文件(如 .mp4/.ogg/等)获取 URI 时遇到了一些麻烦。问题是我需要在运行网络服务器的 python 中执行此操作。

最初,我是这样进行的:

def __parse64(self, path_file):
    string_file = open(path_file, 'r').readlines()
    new_string_file = ''
    for line in string_file:
        striped_line = line.strip()
        separated_lines = striped_line.split('\n')
        new_line = ''
        for l in separated_lines:
            new_line += l
        new_string_file += new_line
    self.encoded_string_file = b64.b64encode(new_string_file)

但是,如果您将结果与此处给出的结果进行比较,那么这种方式并不能提供我需要的东西。

我需要的是一种在 python 中从 FileReader 类(参见上面链接的代码)中实现函数 readAsDataURL() 的方法。

更新: @SeanVieira 给出的解决方案返回 URI 的有效数据字段。

def __parse64(self, path_file):
    file_data = open(path_file, 'rb').read(-1) 
    self.encoded_string_file = b64.b64encode(file_data)

现在我怎样才能用前面的字段完成 URI?像这样

例如:data:video/mp4;base64,data

谢谢!

4

2 回答 2

0

问题是您将二进制编码的数据视为文本数据,这会破坏您的代码。

尝试:

def __parse64(self, path_file):
    file_data = open(path_file, 'rb').read(-1) 
    #This slurps the whole file as binary.
    self.encoded_string_file = b64.b64encode(file_data)
于 2011-02-16T18:43:11.710 回答
0

如果文件非常大(超过 7mb),@SeanVieria 答案将不起作用

此功能适用于所有情况(在 Python 3.4 版上测试):

def __parse64(self, path_file):
        data = bytearray()
        with open(path_file, "rb") as f:
            b = f.read(1)
            while b != b"":
                data.append(int.from_bytes(b, byteorder='big'))
                b = f.read(1)
        self.encoded_string_file = base64.b64encode(data)
于 2018-03-01T07:29:20.893 回答