文件上传的几种方式_django

摘要:
1、 以表单组件形式上传文件的缺点:页面将在后台刷新:前端:2.Ajax上传可以在不刷新页面的情况下实现上传。1.原生ajax上传使用XMLHttpRequest对象进行上传过程:生成XMLHttpRequest object object write data open()start send send()write object的回调函数xhr Onreadystatechange XMLHttpRequest object简介:

一、form组件形式上传文件

缺点:页面会刷新

后台:

文件上传的几种方式_django第1张

前端:

 文件上传的几种方式_django第2张

二、ajax形式上传

能够实现页面不刷新上传

1、原生ajax上传,使用XMLHttpRequest对象来进行上传

  流程:

    生成XMLHttpRequest对象

    对象编写数据open()

    开始发送send()

    编写对象的回调函数xhr.onreadystatechange

  XMLHttpRequest对象介绍:

    文件上传的几种方式_django第3张

    文件上传的几种方式_django第4张

 原生ajax实现:

get:不需要对格式进行说明

post提交方式:发送前需要对上传的格式进行说明  

  (1)上传数据:xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  文件上传的几种方式_django第5张

  (2)上传文件:使用FormData()对文件进行转换成对象

  前端:

 1     <div>ajax提交</div>
 2     {#    ajax提交#}
 3     <div>
 4     <input type="text" name="t1"  >
 5     <input type="file" name="file" id="file" >
 6     <input type="button" value="原生ajax" onclick="put1()" >
 7         <img src="" id="preview">
 8     <input type="button" value="jquery 提交">
 9     </div>
10 
11 
12     <script src="/static/jquery-1.12.4.js"></script>
13     <script>
14         function put1() {
15             var formdata= new FormData();
16             formdata.append("k1","v1");
17             formdata.append("file",document.getElementById("file").files[0]);
18 
19             var xhr=new XMLHttpRequest();
20             xhr.onreadystatechange=function(){
21               if (xhr.readyState==4){
22                   res="/"+xhr.responseText;
23                   $("#preview").attr("src",res);
24                   {#alert(res)#}
25               }
26             };
27             xhr.open("POST","/ajax_put/");29             xhr.send(formdata);
30         }

后台:

 1 def ajax_put(request):
 2     if request.method=="GET":
 3         print(request.GET.get("a"))
 4         return HttpResponse("test")
 5     elif request.method=="POST":
 6         file_obj=request.FILES.get("file")
 7         file_path = os.path.join('static', file_obj.name)
 8         f = open(file_path, "wb")
 9         for chunk in file_obj.chunks():
10             f.write(chunk)
11         f.close()
12 
13         k1=request.POST.get("k1")
14         print(k1)
15         return HttpResponse(file_path)

2、JQuery的ajax提交

也是使用FormData()对文件进行转换成对象

发送时注明:

contentType:false,
processData:false,
 1 <script src="/static/jquery-1.12.4.js"></script>
 2     <script>
 3      function put2() {
 4             var formdata= new FormData();
 5             formdata.append("k1","v1");
 6             formdata.append("file",$("#file")[0].files[0]);
 7 
 8             $.ajax({
 9                 url:"/ajax_put/",
10                 method:"POST",
11                 data:formdata,
12                 contentType:false,
13                 processData:false,
14                 success:function (arg) {
15                     alert(arg)
16                 }
17             })
18         }
19     </script>

3、伪造的ajax文件上传

iframe标签和form标签配合完成

 1         function put3() {
 2             $("#f1").submit();
 3             $("#ifr")[0].onload=loadFrom;
 4         }
 5         function loadFrom() {
 6             var res=$("#ifr")[0].contentWindow.document.body.innerText;
 7             var test='/'+res;
 8             console.log(res)
 9             console.log(test)
10             $("#preview").attr("src",test);
11         }

 文件上传选择:

伪造ajax(iframe)>jQuery的ajax>原生ajax

免责声明:文章转载自《文件上传的几种方式_django》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇前端切图两种方法整理webpack打包js,css和图片下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ajax提交表单数据(包含文件)

1. 表单数据->JSON->后台 2. 表单序列化【方式一】 jquery.serializejson.js <script src="http://t.zoukankan.com/js/jquery.serializejson.js"></script> <script> $('#btnRegi...

设置Django生产环境系统重启后的自动启动项

前面,作者已经介绍了把Django部署到生产环境中的主要方法,现在我们来看一下如何设置项目开机启动。 在把Django项目部署到生产环境中时,我们前面使用安装包和源码安装了Nginx、uwsgi、redis等,这些应用安装后,不会使用系统默认服务一样来快速启停服务,需要到对应的安装目录下才能启动应用。如果服务因为某些原因重启,上述应用不能自动启用,实际生产...

黑马lavarel教程---11、响应处理

黑马lavarel教程---11、响应处理 一、总结 一句话总结: 如果在昂扬状态,看学习视频和运动时间重合,会很舒服 1、jquery的$.post参数为什么不需要占位? 因为每个参数的类型不同,可以识别:$.post:$.post (地址,[参数对象,回调,期望返回类型]); 2、常见的ajax响应数据类型? 有json和xml、text/html,但...

基于workerman的实时推送(摒弃ajax轮询)

先扯些这些内容: TCP/IP TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有: TCP包括FTP、HTTP、TELNET、SMTP等协议 UDP包括DNS、TFTP等协议 短连接 连接->传输数据->...

django -过滤器的使用

前情提要:   最近工作中用到django 中的      自定制过滤器的内容, 再此 复习一波过滤器和自定制 过滤器的内容 自定制过滤器   1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2、在app中创建templatetags模块(模块名只能是templatetags)...

Python学习第118天(Django回头看:MVCMTV、Django初步、static、url命名、分区)

今天开始重新复习,内容看的也更连贯一些,下面开始内容复述,先说一下MTV和MVC的问题 MVC(modles views controller)即web应用模型,可以指代各种各样的模型 modles即为模型 views 视图,特指用户看到的html文件 controller控制器 MTV(modles template views)即为Django模型,...