Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么连续上载同一文件时会收到空的InMemoryUploadedFile对象_Python_Django - Fatal编程技术网

Python 为什么连续上载同一文件时会收到空的InMemoryUploadedFile对象

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请求中第二次收到文件时(因为上传脚本是在无限循环中运行的),文件是空的

我有一个脚本,它向Django发送一个上传文件的POST请求。它无限期运行并上载文件“file1.csv”

现在,当django第一次收到file1.csv时,我可以读取内容,并且大小不是零

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年多过去了,你的答案仍然是正确的。我花了几个小时试图找到解决这个问题的办法!实际上,我的代码按预期工作,但我无法通过测试。。。该死,我真希望早点找到你的答案!:-)非常感谢你!相关源代码:相关源代码: