如何在 Django 中使用 Ajax 上传图片? Python

Posted

技术标签:

【中文标题】如何在 Django 中使用 Ajax 上传图片? Python【英文标题】:How to upload picture using Ajax in Django ? Python 【发布时间】:2022-01-08 07:41:36 【问题描述】:

我正在尝试在 Django 中使用 Ajax(使用 FormData)上传个人资料图片。

以下是我在html页面中使用的代码,

<img src="/media/user_profile.picture"    id="pro_file"/>
<input id="upload-file" type="file" name="file"/>

在 jQuery (Ajax) 中,

var fd = new FormData();
var vidFileLength = $('#upload-file')[0].files.length;
if(vidFileLength === 0)
    var files = $('#pro_file').attr('src');

else
    var files = $('#upload-file')[0].files[0];

fd.append('file',files);

然后我在 Ajax 的 data 属性中发送了fd

但是,views.py 中下面是我的 sn-p 代码,

fd = request.FILES
try:
    profile_pic = fd['file']
except KeyError as e:
    profile_pic = request.POST['file']
profile_pic = str(profile_pic).replace("/media/","")

使用这种方法,我的代码可以工作,但我怀疑这是一种正确的方法吗?请问有什么建议吗?

【问题讨论】:

【参考方案1】:

如果用户已经有图片并且他们没有通过输入选择新图片,是否有理由将 URL 发送回服务器?如果确实需要,服务器可以从数据库中查找它。如果这是一个更新的配置文件视图,那么您不需要做任何事情并且可以忽略它不会被发回。

【讨论】:

您好,感谢您回复。这是一个更新的个人资料页面,并且使用 FormData,我正在使用 .append() 方法发送个人资料图片以及其他信息。但是,如果下一次,我不想更新个人资料图片,而只想更新个人资料中的文字,那么我会收到此错误django.utils.datastructures.MultiValueDictKeyError: 'file' 即使fd['file'] 为空,我有什么办法可以使它工作。 谢谢。完毕。我想确认这是一种安全的方法吗?或者你能给我一些有价值的建议来改进它吗? 你所说的“安全的方法”是什么意思?

以上是关于如何在 Django 中使用 Ajax 上传图片? Python的主要内容,如果未能解决你的问题,请参考以下文章

Django - 使用 POST 请求仅上传模型中的图片

无法上传多个图像 django - ajax

上传文件后,如何在 Django 中使用 AJAX 更新表(与 JavaScript 链接)?

python - django 使用ajax将图片上传到服务器并渲染到前端

那些年,我们在Django web开发中踩过的坑——神奇的‘/’与ajax+iframe上传

如何在codeigniter中使用ajax上传图片?