我有一个脚本,它向Django发送POST请求以上载文件。它无限期运行并上传一个文件“file1.csv”。在
files ={"uploadedfile": ("file1.csv", open("file1.csv", 'rb'))}
requests.post(url, files=files)
现在,当django第一次收到file1.csv时,我可以读取内容,并且大小不为零。在
^{pr2}$输出:
File size: 1758
但是当我在一个新的POST请求中第二次收到该文件时(因为上载脚本正在无限循环中运行),文件是空的。在
File size: 0
我不明白这种行为。有什么想法吗?在
我试着上传多个不同的文件。每当同一个文件在第一次上传n
次之后,InMemoryUploadedFile对象总是空的。在
为什么?在
只需做
file.seek(0)
。那会解决你的问题。在你的文件是否大于2.5兆字节?在
默认情况下,如果上载的文件小于2.5兆字节,Django将在内存中保存上载的全部内容。这意味着保存文件只需要从内存读取和写入磁盘,因此速度非常快。在
但是,如果上载的文件太大,Django会将上载的文件写入存储在系统临时目录中的临时文件中。在类Unix平台上,这意味着您可以期望Django生成一个名为/tmp/tmpzfp6I6.upload的文件。如果上传足够大,您可以看到这个文件随着Django将数据流到磁盘上而增长。在
这些细节(2.5 MB;/tmp;等)只是“合理的默认值”,可以按照下一节中的描述进行定制。在
Here是Django文件上载的指令。希望有帮助。在
我以前也遇到过类似的问题。如果您执行以下行一次,就会发生这种情况
下一行需要上传不止一次。在
^{pr2}$我猜您是从一个解释器运行上面的,并且认为您可以创建
files
字典一次并上传多次。它不会起作用的!此外,这与Django没有任何关系。在所以,在每次上传之前,重新创建你的
files
字典,你应该很好。在相关问题 更多 >
编程相关推荐