-3
我已經查看了werkzeug的源代碼和文檔,它沒有指定它打開的模式。由於普通文件的默認打開模式是文本模式,它給我帶來了問題。此前,我遇到了一個問題,即在sqlalchemy中將data = storage.read()保存到LargeBinary類型中,並出現錯誤消息:無法將unicode轉換爲字節類型。Filestorage storage.read()以二進制模式打開文件嗎?
我已經查看了werkzeug的源代碼和文檔,它沒有指定它打開的模式。由於普通文件的默認打開模式是文本模式,它給我帶來了問題。此前,我遇到了一個問題,即在sqlalchemy中將data = storage.read()保存到LargeBinary類型中,並出現錯誤消息:無法將unicode轉換爲字節類型。Filestorage storage.read()以二進制模式打開文件嗎?
是的,文件以二進制模式打開。見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
打開。