使用Python 3在Django(1.7)中上传文件:
f = form.files['file']
f.__repr__()
输出
<InMemoryUploadedFile: index.html (text/html)>
如果我拨打f.readline()
,我会收回字节数。
通常情况下没关系,我可以只读取文件并对其进行解码,但是在这种情况下我将文件传递给另一个期望在它接收的参数上调用readline()
的函数,并且{{{ 1}}需要返回unicode而不是字节。
是否可以在readline()
的实例上设置编码等,因此readline会返回unicode而不是字节?或者我是否必须先使用InMemoryUploadedFile
读取整个文件,然后将StringIO
的实例传递给我的函数?
答案 0 :(得分:5)
处理此问题的一般方法可能是write a custom upload handler和tell Django to use it。但我从来没有这样做过,所以我不确定。
但是一个简单的方法就是包装底层文件对象。 (如果您使用TextIOWrapper
代替StringIO
,则无需担心开销。)
from io import TextIOWrapper
f = form.files['file']
text_f = TextIOWrapper(f.file, encoding='utf-8')