我有一个同时上传两个文件的请求。对象的 FILES 属性request
如下所示:
<MultiValueDict: {u'output': [<InMemoryUploadedFile: output.txt (text/plain)>], u'history': [<InMemoryUploadedFile: .history.json (application/octet-stream)>]}>
我将两个文件都存储为变量:
output = request.FILES['output']
history = request.FILES['history']
然后,我将 Django 模型上的两个文件字段分配给这些文件以尝试保存它们,但只有分配给的文件字段被output
正确保存,另一个应该包含历史内容的字段不包含任何内容。
尝试在调试器中解决此问题后,我发现我只能读取history
一次的内容,然后history.read()
返回一个空字符串:''
. output
可以读取任意多次,它仍然返回outputs
的实际内容。
我尝试了一堆不同的hacky策略来保存内容history
,包括使用创建新文件File
,ContentFile
但似乎django正在无视我创建返回此内容的文件的任何尝试.read()
作为记录,history
它包含大量采用有效 JSON 格式且大小约为 12k 的二进制数据。 file
说它是:
ASCII text, with very long lines, with no line terminators
Django的处理方式有什么我遗漏的history
吗?
编辑:这是我要保存的模型上的字段(尽管我相信问题是在保存之前发生的):
history_file = models.FileField(
upload_to=history_file_name,
null=True,
blank=True
)
output_file = models.FileField(
upload_to=output_file_name,
null=True,
blank=True
)
这是保存模型的代码:
result.output_file = output
challenge.history_file = history
challenge.save()
此问题出现在基于 View 的 CBV 的 post 方法中。我没有更改 Django 1.6.5 附带的任何默认文件处理设置