ajax头像上传前预览,django头像上传预览功能

页面格式

f0cd11f13018bb97ba463d2780a2e0f1.png

注册页面

31f8911f45cbfc5b8b43a0b8631f79aa.png

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

头像需求

有默认的头像

点击头像就可以上传图片

上传图片后可以预览

生成默认的头像

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

35fee8a277f06174f75b297848959a6a.png

点击头像上传图片

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

头像

f1 属性为: .f1{

position: absolute;width: 80px;height: 80px;top: 0;left: 0;opacity: 0

}

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

b332049460b2bba277fcc3b2d040d530.png

上传图像后预览

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

直接把文件存到后台硬盘上,然后在从硬盘上读取出来,使用到的是ajax,formData,可以参考博客https://blog.51cto.com/sgk2011/2085605

下2种方式通过浏览器的方式,这个对浏览器有要求

登陆页

.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

}

$(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);

})

}

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

function bindAvatar(){

if(window.URL.createObjectURL){

bindAvatar2();

}else if(window.FileReader){

bindAvatar3()

}else{

bindAvatar1();

}

}