原生js上传头像功能(base64)(完整demo)

用原生js实现上传头像,原理是通过new FileReader();将图片转换成base64格式的一长串字符串。将字符串提交给后台即可。

就是这个字符串代替img路径src实现图片显示。

完整demo:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <script src='./js/jquery-3.4.1.min.js'></script>

    <title>Document</title>

</head>

<body>

    <input id='fileid' type="file" value='选择文件'>

    <hr>

    <button id='btn'>点击上传</button>

    <img id='img' src="" alt="">

    <script>

        //上传头像将本地图片,转换成base64上传到后台。

        $('#btn').click(function(){

           // console.log($('#fileid')[0].files[0],new FileReader())

            var reader = new FileReader();

            var AllowImgFileSize = 2100000; //上传图片最大值(单位字节)( 2 M = 2097152 B )超过2M上传失败

            var file = $("#fileid")[0].files[0];

              var imgUrlBase64;

          if (file) {

                //将文件以Data URL形式读入页面  

                imgUrlBase64 = reader.readAsDataURL(file);

                reader.onload = function (e) {

                //var ImgFileSize = reader.result.substring(reader.result.indexOf(",") + 1).length;//截取base64码部分(可选可不选,需要与后台沟通)

                    if (AllowImgFileSize != 0 && AllowImgFileSize < reader.result.length) {

                        alert( '上传失败,请上传不大于2M的图片!');

                        return;

                    }else{

                        //执行上传操作

                        alert(reader.result);//重点得到这个字符串,然后把这个字符串给后台就行。

                        $('#img').attr('src',reader.result)

                    }

                }

            }         

        })



 

//第二个功能,本demo没有用到。我自己标记一下怕忘。

        //将站内图片转换为base64

     function  base(){

       var url = "static/img/js1.jpg";//这是站内的一张图片资源,采用的相对路径

       convertImgToBase64(url, function(base64Img){

        //转化后的base64

        alert(base64Img);

       });             

    }

 

    //实现将项目的图片转化成base64

    function convertImgToBase64(url, callback, outputFormat){

       var canvas = document.createElement('CANVAS'),

      ctx = canvas.getContext('2d'),

      img = new Image;

      img.crossOrigin = 'Anonymous';

        img.src = url;

      img.onload = function(){

          canvas.height = img.height;

          canvas.width = img.width;

          ctx.drawImage(img,0,0);

          var dataURL = canvas.toDataURL(outputFormat || 'image/png');

          callback.call(this, dataURL);

          canvas = null; 

        };

      

    }    



 

    </script>

</body>

</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值