Django文件上传

Posted W-D

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django文件上传相关的知识,希望对你有一定的参考价值。

 

一、form表单上传

1.页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url ‘upload‘ %} " method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="img">
    <input type="submit">
</form>
</body>
</html>

2.后端view函数处理

def upload(request):
    if request.method=="GET":
        return  render(request,upload.html)
    elif request.method=="POST":
        res={"status":"success","code":999}
        img_obj=request.FILES.get(img)#获取文件对象
        with open(os.path.join(static,img_obj.name),"wb") as f:
            for chunk in img_obj.chunks(chunk_size=1024):
                f.write(chunk)
        return HttpResponse(json.dumps(res))
二、利用Jquery中ajax+FormData实现上传文件

上传步骤:

 

1.页面代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<form action="{% url ‘upload‘ %} " method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="img">
</form>
<span style="padding: 5px;color: royalblue" onclick="Jqajax();">jq上传</span>
<script type="text/javascript" src="/static/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="/static/jquery.cookie.js"></script>
<script>

    function Jqajax() {
       var file_obj=$(input[name="img"])[0].files[0];//获取dom形式的文件对象
       var form_obj=new FormData();   //创建formdata对象
       form_obj.append(img,file_obj);   //将文件对象加载formdata中
        $.ajaxSetup({                     //设置csrf_token
            beforeSend: function (xhr, settings) {
                    xhr.setRequestHeader("X-CSRFToken", $.cookie("csrftoken"));
            }
        });
       $.ajax({
           type: POST,
           url: {% url upload %},
           data: form_obj,//指明发送的文件对象
           processData: false, // 告诉jquery要传输data对象
           contentType: false,   // 告诉jquery不需要增加请求头对于contentType的设置
                success: function (data) {
                    console.log(data)
           }
       })
    }
</script>
</body>
</html>

后端处理逻辑不变

 

以上是关于Django文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中上传文件? [关闭]

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

django项目中.gitignore文件忽略上传的文件,以及数据库迁移文件到底是否需要上传吗?

Django 文件上传返回无

Django modelForm 中的文件上传

如何在 Django Summernote 中显示编程片段的代码块?