Django

Stella981
• 阅读 567

一:form表单标签的文件上传

1: 浏览器:

html文件

<h4>form文件上传</h4>
<form action="/file_put/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    姓名<input type="text" name="user">
    文件<input type="file" name="file_obj">
    <input type="submit">
</form>

2:服务端:

urls.py

path('file_put/', views.file_put),

views.py

def file_put(request):
    print(request.POST)   #<QueryDict: {'csrfmiddlewaretoken': ['Cng1EW8TV1sbsknKXTQfsJHeGkvStPI33d9KNBkkur39tsuG68xROGmyZ9hZkcap'], 'user': ['lilz']}>
    print(request.FILES)   #<MultiValueDict: {'file_obj': [<InMemoryUploadedFile: 1.doc (application/msword)>]}>
    file_obj=request.FILES.get('file_obj') #获取到文件对象

    # 文件对象有一个name属性,获取文件名称字符串
    print(file_obj.name)
    path=file_obj.name  #文件名

    from homework import settings  #setting文件中有绝对路径
    import os
    path=os.path.join(settings.BASE_DIR,"files","img",path)  #拼文件名的路径
    with open(path,"wb") as f:  #写入文件
        for line in file_obj:
            f.write(line)

    return HttpResponse('ok')

效果:

Django

Django

二:ajax文件上传

服务端和form表单的形式一样,不变

客户端浏览器:

<h4>4 Ajax形式的文件上传</h4>

<div>
    姓名<input type="text" id="user">
    文件<input type="file" name="file_obj" id="file">
    <input type="button" class="filebtn" value="提交">
    <p class="msg"></p>
</div>


<script>
    {#发送文件#}
    $('.filebtn').click(function () {
        var formdata=new FormData();  //实例化,formdata格式
        //$('#file')[0].file[0]获取文件对象
        formdata.append("file_obj",$("#file")[0].files[0]);
        formdata.append("user",$("#user").val());

        $.ajax({
            url:'/file_put/',
            type:'post',
            data:formdata,

            //ajax 上传文件必备参数
            processData: false ,    // 不处理数据
            contentType: false,    // 不设置内容类型
            success:function (response) {
                console.log(response)
                if (response=="ok"){
                      $(".msg").html("提交成功!")
                  }
            }
        })
    });

######################------------processData---------################

processData:声明当前的data数据是否进行转码或预处理,默认为true,即预处理;if为false,
             那么对data:{a:1,b:2}会调用json对象的toString()方法,即{a:1,b:2}.toString()
             ,最后得到一个[object,Object]形式的结果。
            
######################------------contentType---------################

contentType:默认值: "application/x-www-form-urlencoded"。发送信息至服务器时内容编码类型。
             用来指明当前请求的数据编码格式;urlencoded:?a=1&b=2;如果想以其他方式提交数据,
             比如contentType:"application/json",即向服务器发送一个json字符串:
               $.ajax("/ajax_get",{
             
                  data:JSON.stringify({
                       a:22,
                       b:33
                   }),
                   contentType:"application/json",
                   type:"POST",
             
               });                          //{a: 22, b: 33}

             注意:contentType:"application/json"一旦设定,data必须是json字符串,不能是json对象             views.py:   json.loads(request.body.decode("utf8"))


######################------------traditional---------################

traditional:一般是我们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},
              traditional为false会对数据进行深层次迭代; 

效果:

Django

Django

补充:

print(request.body)   # 原始的请求体数据
print(request.GET)    # GET请求数据
print(request.POST)   # POST请求数据
print(request.FILES)  # 上传的文件数据
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
tp3.2读取excel文件
使用PHPExcel时,首先要下载PHPExcel并放在ThinkPHP/Library/Vendor下1.创建html文件(文件上传按钮)<formaction"{:U('控制器名/方法名')}"method"post"enctype"multipart/formdata" 
Wesley13 Wesley13
2年前
java中使用restful web service来传输文件
【1】上传大文件:前端页面:1)同步上传:<html<body<formaction"http://localhost:8081/webProject/api/file/uploadFile"method"post"enctype"multipart/form
Stella981 Stella981
2年前
PHP导入导出EXCELl,CSV
PHP导入导出Excel,CSVHTML<formaction"{:U('Admin/Unit/importcsv')}"method"post"name"myform"id"myform"enctype"multipart/formdata"<input
Stella981 Stella981
2年前
Play 2.0 用户指南 - 文件上传 -- 针对Scala开发者
   处理文件上传   在form中指定multipart/formdata属性上传文件   上传文件的标准方式是指定form的一个特殊属性multipart/formdata,可以让你混合表单数据和表单文件附件。   开始编写HTML表单:@form(actionrou
Wesley13 Wesley13
2年前
PHP实现图片(文件)上传
这几天整理做过的php项目,感觉这个经常会用到,传上来共享一下咯首先,前端界面1、表单的首行需要加上enctype"multipart/formdata",需要上传的图片必须设置type"file"表示选择文件<formid"img_form"method"post"class"formhorizontal"r
Stella981 Stella981
2年前
Jfinal文件上传
1\.给form添加enctype"multipart/formdata"属性,如下:<formid"form"action"/fileController/upload"method"post"enctype"multipart/formdata"<inputtype"file"name"f
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这