django头像上传预览功能

页面格式

注册页面


这里可以看到有头像按钮,

头像需求

  • 有默认的头像
  • 点击头像就可以上传图片
  • 上传图片后可以预览

生成默认的头像

上传默认图片到指定文件夹,然后把img标签的src指定到这里就可以,

点击头像上传图片

默认添加了<input type="file">后会在图片下面显示上传文件夹的选项,这个和我们当初想的不一样,我们可以通过把input标签和img标签重叠到一起,然后让input标签隐藏起来,这样出来的效果就是点击图片就可以点到input文件这个属性了

        <div style="width: 80px;height: 80px;position: relative;">
            <img id="previewIMG" src="/static/imgs/default.png" alt="头像" style="width: 80px;height: 80px;">
            <input type="file" id="Imgfile" class="f1">
        </div>

f1 属性为: .f1{
position: absolute;width: 80px;height: 80px;top: 0;left: 0;opacity: 0
}

鼠标放到图像上面会显示让上传文件

上传图像后预览

实现这个功能可以有三种方式:

  • 直接把文件存到后台硬盘上,然后在从硬盘上读取出来,使用到的是ajax,formData,可以参考博客http://blog.51cto.com/sgk2011/2085605
  • 下2种方式通过浏览器的方式,这个对浏览器有要求
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆页</title>
    <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
    <style>
        .login {
            margin: 0 auto;
            margin-top: 80px;
            width: 600px;
        }

        .btn_color {
            background-color: ghostwhite;
        }
        .f1{
            position: absolute;width: 80px;height: 80px;top: 0;left: 0;opacity: 0
        }
    </style>
</head>
<body>
<div class="login">

    <form class="form-horizontal" method="post" action="/register/" enctype="multipart/form-data">
        <div style="width: 80px;height: 80px;position: relative;">
            <img id="previewIMG" src="/static/imgs/default.png" alt="头像" style="width: 80px;height: 80px;">
            <input type="file" id="Imgfile" class="f1">
        </div>
        <br>
        <div class="form-group">
            <label class="col-sm-2 control-label">用户名</label>
            <div class="col-sm-10">
                {#      <input type="text" class="form-control" placeholder="用户名" name="user">#}
                {{ obj.username }}
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">密码</label>
            <div class="col-sm-10">
                {#      <input type="password" class="form-control"  placeholder="密码" name="pwd1">#}
                {{ obj.password1 }}
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">确认密码</label>
            <div class="col-sm-10">
                {#      <i?nput type="password" class="form-control"  placeholder="确认密码" name="pwd2">#}
                {{ obj.password2 }}
            </div>
        </div>
        <div class="form-group">
            <label class="col-sm-2 control-label">验证码</label>
            <div class="col-sm-5">
                <input type="text" class="form-control" placeholder="验证码" name="code">
            </div>
            <div class="col-sm-5">
                <img style="width: 120px;height: 30px;" src="/check_code/">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <div class="checkbox">
                    <label>
                        <input type="checkbox"> Remember me
                    </label>
                </div>
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <input type="submit" class="btn btn-default btn_color" value="登陆">
            </div>
        </div>
    </form>
</div>
<script src="/static/jquery-1.12.4.js"></script>
<script>
    $(function () {
        bindAvatar3();
    });
    /*
    function bindAvatar1() {
        $(‘#Imgfile‘).change(function () {
            var csrf = $("input[name=‘csrfmiddlewaretoken‘]").val();
            var formData = new FormData();
            formData.append("csrfmiddlewaretoken",csrf)
            formData.append(‘Imgfile‘,$(this)[0].files[0])
            console.log(formData)
            $.ajax({
                url:‘/avatar_upload/‘,
                type:‘POST‘,
                contentType:false,
                processData:false,
                success:function (args) {
                    console.log(args)
                }
            })
        })
    }
    */
    function bindAvatar2() {
        $(‘#Imgfile‘).change(function () {
            var obj = $(this)[0].files[0];
            var v = window.URL.createObjectURL(obj)//传obj这个文件对象,相当于把这个文件上传到了浏览器,这个时候就可以预览了
            $(‘#previewIMG‘).attr(‘src‘,v)//找到img标签,把src修改后就可以访问了,但是对于浏览器有兼容性
{#             window.URL.revokeObjectURL(v);//手动清除内存中,要想手动,需要加载完毕再去释放#}
            $(‘#previewIMG‘).load(function () {
                window.URL.revokeObjectURL(v);
            })
        })
    }

    function bindAvatar3() {
        $(‘#Imgfile‘).change(function () {
            var obj = $(this)[0].files[0];
            var reader = new FileReader();

            reader.onload = function (e) {
                $(‘#previewIMG‘).attr(‘src‘,this.result)
            }
            reader.readAsDataURL(obj);
        })
    }
</script>
</body>
</html>

如果想要兼容的话,就对上面的方法做一个判断

        function bindAvatar(){
            if(window.URL.createObjectURL){
                bindAvatar2();
            }else if(window.FileReader){
                bindAvatar3()
            }else{
                bindAvatar1();
            }
        }

原文地址:http://blog.51cto.com/sgk2011/2096352

时间: 2024-10-27 13:28:47

django头像上传预览功能的相关文章

jQuery插件ImgAreaSelect 实例讲解一(头像上传预览和裁剪功能)

上一节随笔中,我们已经知道了关于jQuery插件ImgAreaSelect基本的知识:那么现在看一下实例: 首先,要知道我们应该实现什么功能? (1)图片能够实现上传预览功能 (2)拖拽裁剪图片,使其能够显示裁剪后的区域 (3)显示要裁剪区域的坐标 其次,该如何引用该插件呢? 那就具体看一下吧! 第一步:先将样式和文件包引入(根据你自己的位置引入) <!--引入imgareaselect的css样式--> <link rel="stylesheet" type=&qu

多图片上传预览功能

//下面用于多图片上传预览功能 function setImagePreviews(avalue) { var docObj = document.getElementById("doc"); var dd = document.getElementById("dd"); dd.innerHTML = ""; var fileList = docObj.files; for (var i = 0; i < fileList.length;

js实现图片上传预览功能,使用base64编码来实现

实现图片上传的方法有很多,这里我们介绍比较简单的一种,使用base64对图片信息进行编码,然后直接将图片的base64信息存到数据库. 但是对于系统中需要上传的图片较多时并不建议采用这种方式,我们一般会选择存图片路径的方式,这样有助于减小数据库压力,base64 编码后的图片信息是一个很长的字符串,一般我们使用longText类型来将其存入数据库. html代码如下: <div class="col-sm-6"> <img id="headPortraitI

php头像上传预览

php头像上传带预览: 说道上传图片,大家并不陌生,不过,在以后开发的项目中,可能并不会让你使用提交刷新页面式的上传图片,比如上传头像,按照常理,肯定是在相册选择照片之后,确认上传,而肯定不会通过form表单,点击submit刷新式上传.我为大家介绍两种异步非刷新式上传图片+图片预览:第一种,通过现成的uploadfy插件进行上传,网上好多实例.不过我重点为大家介绍的是第二种,通过Ajax上传图片.因为使用uploadfy插件需要设备支持swf格式的Flash,所以对大多数手机来说,第一种方式就

图片上传预览功能实现

图片预览功能是在网站开发中非常常见的,以前图片预览是一个很简单的功能,只需要JS获得一下上传的路径,然后将路径设置为某一个img标签的src就可以了,但是现在很多浏览器出现安全方面的考虑,都不允许直接获得文件的路径,通过file的value值获得的路径都是带有fakepath,所以获得路径就变得困难,但是H5之后,可以通过JS的fileReader来实现文件的预览:代码如下: JS处理代码: <script type="text/javascript"> document.

文件上传-------头像上传预览

这次来讲怎么来用代码完成头像更换 在上篇博客中也说了图片上传,但选择文件的之后,在网页上并没有显示这张图片,如果是要做头像的话,最好有头像预览 就像平时我们换QQ头像那样,一点图片就会出来文件预览,然后再选择一张图片,点击,页面就会换成你刚刚点击的那张图片 来看一下做法,先说第一个页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/D

头像上传预览

这个可以测试头像预览上传 需要先将图片放到服务器 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta

图片上传预览功能

function PreviewImage(imgFile,key,key1,key2) { var filextension=imgFile.value.substring(imgFile.value.lastIndexOf("."),imgFile.value.length); filextension=filextension.toLowerCase(); if ((filextension!='.jpg')&&(filextension!='.gif')&

FileUpload实现上传预览功能

<asp:FileUpload ID="FileUpload1" runat="server" onchange="chgImg(this)" /> <div> <img src="" id="Photo" runat="server" style="max-height: 80px;float:left" /> <div i