• Python Django文件上传


    文件保存本地

    view视图

    def update(request):
        if request.method =='GET':
            return render(request,'update.html')
        else:
            myFile = request.FILES.get("img")
        #上传的文件是一个对象
            print(myFile.name)
            print(myFile.size)
            f = open(myFile.name,'wb')
            for files in myFile.chunks():
                f.write(files)
            return render(request,'update.html')
    

    前端

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <form action="update.html" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        文件上传:<input type="file" name="img">
        <input type="submit">
    </form>
    
    </body>
    </html>
    

    文件上传到数据库

    首先 需要在setting中设置文件的存储路径 

    #一般创建static文件
    MEDIA_ROOT = os.path.join(BASE_DIR,"static/...")
    #在models中创建数据库
    class Files(models.Model):
        photo_url = models.ImageField(
            upload_to='imgae'
        )

    view视图
    def files_ulr(request):
    if request.method =='GET':
    return render(request,'photo.html')
    else:
    myFile = request.FILES.get('img')
    photo_url = models.Files.objects.create(photo_url=myFile)
    return HttpResponse("ok")

    通过Ajax上传文件

     

    #HTML中编辑JQ语句
    form action="update.html" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        头像<input type="file" name="touxiang" id="file">
        <br>
        <button id="btn">提交</button>
    </form>
    <script>
        $("#btn").click(function(){
            {#ajax上传文件的时候需要这个类型,它会将添加的键值对加工成formata的类型#}
            var formdata = new FormData();
            {##添加键值对的方法是append,注意写法,键和值之间使用逗号隔开#}
            formdata.append('file',$("#file")[0].files[0]);
            {#csrf_tocken#}
            formdata.append('csrfmiddlewaretoken',$('[name=csrfmiddlewaretoken]').val());
            console.log(formdata)
            $.ajax({
                'url':'update.html',
                'type':'post',
                'data':formdata,
                {#不处理数据#}
                processData:false,
                contentType:false,
                success:function(arg){
                    console.log(arg)
                }
            })
        })
    </script>
    
    #view中操作
        if request.method =='GET':
            return render(request,'update.html')
        else:
            # name = request.POST.get('uname')
            file = request.FILES.get('touxiang')
            file_name = file.name
            # 拼接文件路径
            # path = os.path.join('static','img',file_name)
            with open(file_name,'wb') as f:
                for i in file.chunks():
                    f.write(i)
            return render(request, 'update.html')

      

  • 相关阅读:
    云计算下一浪潮,腾讯云抢占 Serverless 制高点
    Serverless + GitHub Actions 完美自动化部署静态网站
    Serverless 技术在格灵深瞳的落地实践
    万物皆可 Serverless 之我的 Serverless 之路
    LeetCode 哈希表 136:只出现一次的数字(计数哈希表,异或)
    Spring 01 IOC
    LeetCode 数组:1.两数之和 11. 盛最多水的容器
    LeetCode 链表:21合并两个有序链表 19删除链表的倒数第N个节点
    Maybatis的一些总结(三:增删改查)
    Maybatis的一些总结(一:了解)
  • 原文地址:https://www.cnblogs.com/toby-yu/p/12373100.html
Copyright © 2020-2023  润新知