将通过 ajax 上传的文件保存到 Django 模型 ImageField
Posted
技术标签:
【中文标题】将通过 ajax 上传的文件保存到 Django 模型 ImageField【英文标题】:Saving file uploaded via ajax to Django model ImageField 【发布时间】:2012-10-12 09:43:02 【问题描述】:文件在请求中作为原始数据提供。我应该如何转换它以保存在ImageField
代表的磁盘上 model
中。
尝试过的东西:
file_ = File(request)
modelinstance.picture.save(filename, file_, save=False)
modelinstance.save()
以及上述的一些变体。有关如何在 django 视图中执行此操作的示例会有所帮助。
谢谢!
【问题讨论】:
这个***.com/questions/6232089/…完全帮助 【参考方案1】:如果您使用ModelForm,您将没有什么特别的事情可做。 ModelForm 自动处理 FileField/ImageField。
如果你真的想手动做,django has docs
【讨论】:
这只是问题的一部分。实际的问题是我的文件不在 request.FILES 中,因为它是一个 ajax XHR 请求。那么我如何从那里读取它并分配给我的 ImageField 您的意思是在 XHR 请求中您有文件 base64 编码或类似的东西?那很有意思。检查文件字段想要什么。文件对象?是否需要已经保存在磁盘上? 通过ajax上传文件非常复杂,这个插件很容易malsup.com/jquery/form另外你应该改进你的问题,“你的文件不在request.FILES中”是怎么回事评论而不是问题?哼哼……【参考方案2】:这样解决
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)
【讨论】:
以上是关于将通过 ajax 上传的文件保存到 Django 模型 ImageField的主要内容,如果未能解决你的问题,请参考以下文章
无法将图像上传到 Django 项目,获取表单对象没有属性“保存”