zoukankan      html  css  js  c++  java
  • 框架----Django之文件上传

    一、文件上传

    1. 浏览器访问

    http://127.0.0.1:8000/f1/
    
    http://127.0.0.1:8000/f2/

    2. urls

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^f1/', views.f1),
        url(r'^f2/', views.f2),
    ]

    3. views

     1 from django.shortcuts import render,redirect,HttpResponse
     2 from app01 import models
     3 from django.forms import Form
     4 from django.forms import fields
     5 from django.forms import widgets
     6 
     7 
     8 # **************************文件上传**************************
     9 def f1(request):
    10     if request.method == "GET":
    11         return render(request,'f1.html')
    12     else:
    13         import os
    14         # request.POST
    15         file_obj = request.FILES.get('fafafa')
    16         f = open(os.path.join('static',file_obj.name),'wb')
    17         for chunk in file_obj.chunks():
    18             f.write(chunk)
    19         f.close()
    20         # return render(request,'f1.html')         # 上传成功后刷新当前页面
    21         return HttpResponse('上传成功')          # 上传完成后显示文字
    22 
    23 class F2Form(Form):
    24     user = fields.CharField()
    25     fafafa = fields.FileField()
    26 
    27 def f2(request):
    28     if request.method == "GET":
    29         obj = F2Form()
    30         return render(request,'f2.html',{'obj':obj})
    31     else:
    32         obj = F2Form(data=request.POST,files=request.FILES)
    33         if obj.is_valid():
    34             print(obj.cleaned_data.get('fafafa').name)
    35             print(obj.cleaned_data.get('fafafa').size)
    36         return render(request,'f2.html',{'obj':obj})
    views

    4. templates

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <form method="POST" action="/f1/" enctype="multipart/form-data">
     9         {% csrf_token %}
    10         <input type="text" name="user" />
    11         <input type="file" name="fafafa" />
    12         <input type="submit" value="提交" />
    13     </form>
    14 </body>
    15 </html>
    f1.html
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <form method="POST" action="/f2/" enctype="multipart/form-data">         
     9         {# 不能少了这个属性:enctype="multipart/form-data" ,否则后台拿不到数据 #}
    10         
    11         {% csrf_token %}
    12         {{ obj.user }}
    13         {{ obj.fafafa }}
    14         <input type="submit" value="提交" />
    15     </form>
    16 </body>
    17 </html>
    f2.html

     二、文件上传--------原生Ajax上传文件、jQuery Ajax上传文件、伪Ajax上传文件

    1. 浏览器访问

    http://127.0.0.1:8000/upload/

    2. urls

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^upload/', views.upload),
    ]
    View Code

    3. views

     1 from django.shortcuts import render,HttpResponse,redirect
     2 
     3 import os
     4 def upload(request):
     5     if request.method == 'GET':
     6         return render(request,'upload.html')
     7     else:
     8         print(request.POST,request.FILES)
     9         file_obj = request.FILES.get('fafafa')
    10         file_path = os.path.join('static',file_obj.name)
    11         with open(file_path,'wb') as f:
    12             for chunk in file_obj.chunks():
    13                 f.write(chunk)
    14 
    15         return HttpResponse(file_path)
    views

    4. templates

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title></title>
     6 </head>
     7 <body>
     8     <h1>原生Ajax上传文件</h1>
     9     <input type="file" id="i1" />
    10     <a onclick="upload1();">上传</a>
    11     <div id="container1"></div>
    12 
    13     <h1>jQuery Ajax上传文件</h1>
    14     <input type="file" id="i2" />
    15     <a onclick="upload2();">上传</a>
    16     <div id="container2"></div>
    17 
    18     <h1>伪 Ajax上传文件</h1>
    19     <form id="f1" method="POST" action="/upload/" target="ifr" enctype="multipart/form-data">
    20         <iframe id="ifr" name="ifr" style="display: none"></iframe>
    21         <input type="file" name="fafafa" />
    22         <a onclick="upload3();">上传</a>
    23     </form>
    24     <div id="container3"></div>
    25 
    26     <script src="/static/jquery-1.12.4.js"></script>
    27     <script>
    28 
    29         function upload1(){
    30             var formData = new FormData();
    31             formData.append('k1','v1');
    32             formData.append('fafafa',document.getElementById('i1').files[0]);
    33 
    34             var xhr = new XMLHttpRequest();
    35             xhr.onreadystatechange = function(){
    36                 if(xhr.readyState == 4){
    37                     var  file_path = xhr.responseText;
    38                     var tag = document.createElement('img');
    39                     tag.src = "/"+ file_path;
    40                     document.getElementById('container1').appendChild(tag);
    41 
    42                 }
    43             };
    44             xhr.open('POST','/upload/');
    45             xhr.send(formData);
    46         }
    47 
    48         function upload2(){
    49             var formData = new FormData();
    50             formData.append('k1','v1');
    51             // formData.append('fafafa',document.getElementById('i1').files[0]);
    52             formData.append('fafafa',$('#i2')[0].files[0]);
    53             // $('#i2') -> $('#i2')[0]
    54             // document.getElementById('i1') -> $(document.getElementById('i1'))
    55 
    56             $.ajax({
    57                 url: '/upload/',
    58                 type: 'POST',
    59                 data: formData,
    60                 contentType:false,
    61                 processData:false,
    62                 success:function(arg){
    63                     var tag = document.createElement('img');
    64                     tag.src = "/"+ arg;
    65                     $('#container2').append(tag);
    66                 }
    67             })
    68         }
    69 
    70          function upload3(){
    71             document.getElementById('ifr').onload = loadIframe;
    72             document.getElementById('f1').submit();
    73 
    74         }
    75         function loadIframe(){
    76             var content = document.getElementById('ifr').contentWindow.document.body.innerText;
    77              var tag = document.createElement('img');
    78             tag.src = "/"+ content;
    79             $('#container3').append(tag);
    80         }
    81     </script>
    82 </body>
    83 </html>
    upload.html

    5. 执行结果截图

     

  • 相关阅读:
    linux定时备份数据库
    svn 没有绿色小勾
    oracle dblink ora-12541 无监听
    WPS 设置多级标题
    sql 提高速度方法
    领骑衫获奖感言与总结
    团队项目(任务五):项目回顾
    项目回顾
    团队项目(任务四):第二次冲刺
    团队项目(任务三):第一次冲刺
  • 原文地址:https://www.cnblogs.com/wangyongsong/p/7127287.html
Copyright © 2011-2022 走看看