django-Ajax实现上传图片(原生JS以及jQuery写法)
2019-06-16 18:50
489 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44301439/article/details/92407710
1.原生实现上传
//首先new一个XMLRequest对象
xml=new XMLHttpRequest();
//上传路径以及提交方式,true表示以异步方式发送数据
xml.open(‘post’,’/upload.html’,true);
//发送数据
xml.send(“k1=v1;k2=v2;”);
2.jQuery实现
$.ajax({
url:’/upload.html’,
data:{‘k1’:‘v1’,‘k2’:‘v2’}
});
3.FormData对象(相当于一个字典,不仅仅可以承载字符串,还能承载文件)
dict=new FormData();
//生成一个键值对
dict.append(‘k1’,‘v1’);
//发送文件
dict.append(‘k2’,文件对象);
xml.send(dict);
后台代码实例:
import os def upload(request): if request.method=="GET": img_list=models.Img.objects.all() return render(request,'upload.html',{'img_list':img_list}) elif request.method=="POST": user = request.POST.get('user') fafafa = request.POST.get('fafafa') obj = request.FILES.get('fafafa') file_path = os.path.join('static', 'upload', obj.name) f = open(file_path, 'wb') for chunk in obj.chunks(): f.write(chunk) f.close() models.Img.objects.create(path=file_path) # return redirect('/upload.html') ret={'status':True,'path':file_path} import json return HttpResponse(json.dumps(ret))
前端代码实例(包括原生js,jQuery):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> .container img{ width: 200px; height: 200px; } </style> </head> <body> <!--<form action="/upload.html" method="post" enctype="multipart/form-data"> <input type="text" name="user"> <input type="file" name="fafafa"> <input type="submit" value="上传"> </form> {% for img in img_list %} <img src="/{{ img.path }}"> {% endfor %} --> <input type="file" name="fafafa" id="img"> <input type="button" value="提交xml" onclick="UploadXML()"> <input type="button" value="提交jquery" onclick="uploadjQuery()"> <div class="container" id="imgs"> {% for img in img_list %} <img src="/{{ img.path }}"> {% endfor %} </div> </body> <script src="/static/jquery-3.4.1.min.js"></script> <script> function UploadXML() { var dict=new FormData(); dict.append('user','v1'); dict.append('fafafa',document.getElementById('img').files[0]); var xml=new XMLHttpRequest(); xml.open('post','/upload.html',true); //回调函数 xml.onreadystatechange=function(){ if (xml.readyState ==4){ var obj=JSON.parse(xml.responseText) if (obj.status){ var img=document.createElement('img'); img.src="/"+obj.path; document.getElementById("imgs").appendChild(img); } } }; xml.send(dict); } function uploadjQuery() { var dict=new FormData(); dict.append('user','v1'); dict.append('fafafa',document.getElementById('img').files[0]); $.ajax({ url:'/upload.html', type:"POST", data:dict, //让数据不被处理 processData:false, contentType:false, dataType:'JSON', success:function (arg) { if (arg.status){ console.log(arg); var img=document.createElement('img'); img.src="/"+arg.path; $('#imgs').append(img); } } }); } </script> </html>
PS:本人小白一个大神绕道
相关文章推荐
- 原生js、jquery实现多张图片上传、预览、删除
- input type='file'上传图片限制大小,类型判断,以及原生js实现上传至后端前实现图片显
- JQuery+ajax实现批量上传图片
- jquery_file_upload in Rails(ajax实现多张图片上传)
- 原生js实现对Ajax的封装(仿jquery)
- ajax上传图片 jquery插件 jquery.form.js 的方法 ajaxSubmit; AjaxForm与AjaxSubmit的差异
- 使用Ajax以及Jquery.form异步上传图片
- 【jQuery】Jquery.form.js实现表单异步提交以及文件上传(带进度条)
- 一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
- Jquery ajaxfileupload.js结合.ashx文件实现无刷新上传
- js读取图片以及AJAX上传图片注意事项
- 原生js方式实现ajax,并仿jquery方式简单调用
- 原生js和jquery实现图片轮播特效
- 在BAE搭建的Django中实现图片上传并用jquery预览图片
- ajaxfileupload.js+springMVC实现多个图片与数据同一个ajax方法上传
- .net+ajax+jquery.form实现简单的图片批量上传 含Demo源码下载
- js实现图片预览以及上传
- Ajax 和 jQuery 实现进度条+上传文件到Django
- ajaxfileupload.js 实现异步上传图片
- 原生js和jquery实现图片轮播特效