Python 为什么连续上载同一文件时会收到空的InMemoryUploadedFile对象
我有一个脚本,它向Django发送一个上传文件的POST请求。它无限期运行并上载文件“file1.csv” 现在,当django第一次收到file1.csv时,我可以读取内容,并且大小不是零Python 为什么连续上载同一文件时会收到空的InMemoryUploadedFile对象,python,django,Python,Django,我有一个脚本,它向Django发送一个上传文件的POST请求。它无限期运行并上载文件“file1.csv” 现在,当django第一次收到file1.csv时,我可以读取内容,并且大小不是零 payload = request.FILES file = payload['uploadedfile'] print "File size:", file.size 输出: File size: 1758 但是当我在新的POST请求中第二次收到文件时(因为上传脚本是在无限循环中运行的),文件是空的
payload = request.FILES
file = payload['uploadedfile']
print "File size:", file.size
输出:
File size: 1758
但是当我在新的POST请求中第二次收到文件时(因为上传脚本是在无限循环中运行的),文件是空的
File size: 0
我不明白这种行为。有什么想法吗
我也试着上传多个不同的文件。每当同一个文件在第一次上载后被上载n
多次时,InMemoryUploadedFile对象始终为空
为什么会这样?您的文件大于2.5兆字节吗 默认情况下,如果上载的文件小于2.5 MB,Django将在内存中保存上载的全部内容。这意味着保存文件只需要从内存读取和写入磁盘,因此速度非常快 但是,如果上载的文件太大,Django会将上载的文件写入存储在系统临时目录中的临时文件。在类Unix平台上,这意味着您可以期望Django生成一个名为/tmp/tmpzfp6I6.upload的文件。如果上传的数据足够大,那么当Django将数据流到磁盘上时,您可以看到该文件的大小增加 这些细节–2.5兆字节/tmp;等等–是简单的“合理默认值”,可以按照下一节所述进行定制
是Django文件上传的指令。希望有帮助。您的文件是否大于2.5 MB 默认情况下,如果上载的文件小于2.5 MB,Django将在内存中保存上载的全部内容。这意味着保存文件只需要从内存读取和写入磁盘,因此速度非常快 但是,如果上载的文件太大,Django会将上载的文件写入存储在系统临时目录中的临时文件。在类Unix平台上,这意味着您可以期望Django生成一个名为/tmp/tmpzfp6I6.upload的文件。如果上传的数据足够大,那么当Django将数据流到磁盘上时,您可以看到该文件的大小增加 这些细节–2.5兆字节/tmp;等等–是简单的“合理默认值”,可以按照下一节所述进行定制
是Django文件上传的指令。希望有帮助。我以前也遇到过类似的问题。如果执行以下行一次,就会发生这种情况
files ={"uploadedfile": ("file1.csv", open("file1.csv", 'rb'))}
下一行涉及多次上传
requests.post(url, files=files)
我猜你是在一个解释器中运行上面的内容,并且认为你可以创建一次文件
字典并上传多次。这行不通!此外,这与Django没有任何关系
因此,在每次上传之前,重新创建您的
文件字典,您应该很好。我以前也遇到过类似的问题。如果执行以下行一次,就会发生这种情况
files ={"uploadedfile": ("file1.csv", open("file1.csv", 'rb'))}
下一行涉及多次上传
requests.post(url, files=files)
我猜你是在一个解释器中运行上面的内容,并且认为你可以创建一次文件
字典并上传多次。这行不通!此外,这与Django没有任何关系
因此,在每次上传之前,重新创建文件
字典,你应该做得很好。只需执行file.seek(0)
。这将解决您的问题。只需执行file.seek(0)
。这将解决您的问题。谢谢您的帮助。不,文件大小不超过2.5 MB。几kBs。我尝试了InMemoryFile和TemporaryFile位置存储,两者的结果都是一样的。这真令人费解!谢谢你的投入。不,文件大小不超过2.5 MB。几kBs。我尝试了InMemoryFile和TemporaryFile位置存储,两者的结果都是一样的。这真令人费解!5年多过去了,你的答案仍然是正确的。我花了几个小时试图找到解决这个问题的办法!实际上,我的代码按预期工作,但我无法通过测试。。。该死,我真希望早点找到你的答案!:-)非常感谢你!5年多过去了,你的答案仍然是正确的。我花了几个小时试图找到解决这个问题的办法!实际上,我的代码按预期工作,但我无法通过测试。。。该死,我真希望早点找到你的答案!:-)非常感谢你!相关源代码:相关源代码: