Python 如何在上传过程中不将整个文件加载到内存中
我使用创建一个上传API。下面的脚本能够将文件上载到目录,但我需要解决两个问题。一个是如何避免将整个文件加载到内存中,另一个是如何设置上载文件的最大大小 是否可以连续读取文件并转储已读取到文件的内容,直到上传完成?Python 如何在上传过程中不将整个文件加载到内存中,python,bottle,Python,Bottle,我使用创建一个上传API。下面的脚本能够将文件上载到目录,但我需要解决两个问题。一个是如何避免将整个文件加载到内存中,另一个是如何设置上载文件的最大大小 是否可以连续读取文件并转储已读取到文件的内容,直到上传完成?upload.save(file\u path,overwrite=False,chunk\u size=1024)函数似乎将整个文件加载到内存中。在本教程中,他们指出使用.read() 我也试过写一个file.write,但都是一样的。文件正在被读取到内存,它将挂起计算机 file_
upload.save(file\u path,overwrite=False,chunk\u size=1024)
函数似乎将整个文件加载到内存中。在本教程中,他们指出使用.read()
我也试过写一个file.write,但都是一样的。文件正在被读取到内存,它将挂起计算机
file_to_write = open("%s" %(output_file_path), "wb")
while True:
datachunk = upload.file.read(1024)
if not datachunk:
break
file_to_write.write(datachunk)
与此相关,我已经看到了一些人声称可以设置最大文件上传大小的属性。我尝试过设置它,但似乎没有任何效果,因为所有文件无论大小都会通过
请注意,我希望能够接收office文档,该文档可以是带有扩展名的简单文档,也可以是带有密码的压缩文档
使用Python3.4和瓶子0.12.7,基本上,您希望在循环中调用
upload.read(1024)
。类似这样(未经测试):
(不要在upload
上调用open
;它已经为您打开了。)
包括更多关于如何读取大文件而不“咕噜咕噜”的示例。我正在尝试运行
f=open(upload.file)
,但遇到类型错误无效文件:
。我面临的挑战是如何将上传文件upload=request.files.get(“upload_file”)
转换为可以使用open(“really_big_file”)读取的文件
您不应该在upload.file
上调用open
;它已经是一个类似文件的对象,可供您使用。只是从中读取。@b4hand,我调用open
创建目标文件,而不是从upload
读取。lukik,你能解决这个问题吗?嗨,不。尽管有下面的建议,它仍然将整个文件加载到内存中。最后,我为客户端安装了一个SFTP框,以便进行连接,但我仍然需要让它正常工作,因为我需要控制上传过程。。有什么新建议吗?
file_to_write = open("%s" %(output_file_path), "wb")
while True:
datachunk = upload.file.read(1024)
if not datachunk:
break
file_to_write.write(datachunk)
with open(file_path, 'wb') as dest:
chunk = upload.read(1024)
while chunk:
dest.write(chunk)
chunk = upload.read(1024)