通过ajax上传文件并保存到Django模型的ImageField中

4
文件在请求中以原始数据的形式可用。我该如何将其转换为可以保存在modelImageField所代表的磁盘上的内容。
尝试过的方法:
file_ = File(request)
modelinstance.picture.save(filename, file_, save=False)
modelinstance.save()

还有一些以上列出的变体,下面是如何在Django视图中执行此操作的示例。

谢谢!


完全受益于这个http://stackoverflow.com/questions/6232089/save-raw-post-data-to-filefield-using-django - Pratik Mandrekar
2个回答

1
这样解决了。
filename = request.GET[ 'yourfilename' ]

from django.core.files.uploadedfile import SimpleUploadedFile
file_contents = SimpleUploadedFile("%s" %(filename), request.raw_post_data)

modelinstance.picture.save(filename, file_contents, True)

1
如果您使用ModelForm,则无需进行任何特殊操作。 ModelForm会自动处理FileField / ImageField。
如果您真的想手动处理,Django 有文档

这只是问题的一部分。实际问题是我的文件不在request.FILES中,因为它是一个ajax XHR请求。那么我该如何从那里读取并分配给我的ImageField? - Pratik Mandrekar
你的意思是在XHR请求中,文件被base64编码或类似方式编码了吗?这很有趣。 检查一下文件字段需要什么。一个文件对象?它需要已经保存在磁盘上吗? - Lars Wikman
通过ajax上传文件非常复杂,但这个插件可以轻松解决问题:http://www.malsup.com/jquery/form/ 另外,你应该改进你的问题,为什么在评论中说“你的文件不在request.FILES”而不是在问题中?嗯嗯... - jpic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接