将通过 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 通过签名的 url 将文件上传到谷歌云存储

Django:将用户上传保存在单独的文件夹中

无法将图像上传到 Django 项目,获取表单对象没有属性“保存”

js 上传文件,通过django存储到数据库,保存类型为blob类型

Django ajax jquery 文件上传

PHP和Ajax将文件路径上传到Mysql并将重命名的图像保存到文件夹失败