我在Python3中使用Flask作为网络服务器,并使用Flask的上传功能。将文件上传到服务器会产生werkzeug.datastructures.FileStorage
object.
我需要此文件的功能之一,还需要能够从路径对象打开文件,所以目前,我正在使用open(file_to_open)
。如果可能的话,我想避免将上传的文件写入临时文件,只是为了再次读取它。所以我的问题由两部分组成:
1:是否可以将此 FileStorage 对象“翻译”为文件对象?
2:如果是这样,这也适用于当前代码(open(file_to_open)
)?
传入文件上传确实呈现为FileStorage
对象。然而,这确实not必然意味着涉及实际的物理文件。
解析文件对象时,Werkzeug 使用stream_factory()
可调用以生成文件对象。默认实现仅创建 500kb 及以上文件大小的实际物理文件,以避免耗尽内存。
For smaller文件使用内存中的文件对象代替。
我不会篡改这个安排;因为它现在可以正常工作,所以问题的处理是透明的,并且只有当文件上传会给您的内存带来太多负担时才会涉及您的硬盘。
相反,我会更改该函数以不需要文件名和/或接受文件对象。
如果你的函数只能采用一条路径or包含的数据作为字符串,您可以通过内省底层来查看是否需要读取该文件.stream
属性:
from werkzeug._compat import BytesIO
filename = data = None
if file_upload.filename is None:
data = file_upload.read() # in-memory stream, so read it out.
else:
filename = file_upload.filename
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)