2015-05-15 83 views
-3

我已经查看了werkzeug的源代码和文档,它没有指定它打开的模式。由于普通文件的默认打开模式是文本模式,它给我带来了问题。此前,我遇到了一个问题,即在sqlalchemy中将data = storage.read()保存到LargeBinary类型中,并出现错误消息:无法将unicode转换为字节类型。Filestorage storage.read()以二进制模式打开文件吗?

回答

0

是的,文件以二进制模式打开。见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() 

因此,无论你得到一个TemporaryFile()对象wb+模式(写入和读取,二进制),或在内存中的对象BytesIO打开。