Filestorage storage.read() 是否以二进制模式打开文件?

Is Filestorage storage.read() open the file in binary mode?

我查看了 werkzeug 的源代码和文档,没有指定打开的模式。由于普通文件的默认打开模式是文本模式,这给我带来了问题。早些时候,我在sqlalchemy中将data=storage.read()保存为LargeBinary类型时出现问题,错误提示:can't convert unicode to byte type.

是的,文件以二进制模式打开。见 default_stream_factory() function source:

def default_stream_factory(total_content_length, filename, content_type,
                           content_length=None):
    """The stream factory that is used per default."""
    if total_content_length > 1024 * 500:
        return TemporaryFile('wb+')
    return BytesIO()

因此,您要么得到一个以 wb+ 模式(写入和读取,二进制)打开的 TemporaryFile() 对象,要么得到内存中的 BytesIO 对象。