欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

图片上传(blob或base64位)

程序员文章站 2022-04-28 21:27:10
...

图片展示以及上传完整版

 图片上传(blob或base64位)

样式

        html,body{
            height:90%;
        } 
       .main{
            min-width: 320px;
            font:  400 14px/1.5 "\5FAE\8F6F\96C5\9ED1",Helvetica;
            background: white;
            font-size: 1em;
            max-width: 768px;
            margin: 0 auto !important;
            padding:20px;color:#666;
            height:100%;
            border:1px solid #666;
        }
         input[type="file"] {
            position: absolute;
            /*font-size: 100px;*/
            right: 0;
            top: 0;
            opacity: 0;    height: 100%;
            width: 100%;
        }
         .addPhotoes{
            border:1px dashed #4196f6;border-radius:3px;
             width:220px;height:160px;float:left;position:relative;
        }
        .addPhotoes::after{
            content:"";
            display:block;
            position:absolute;
            width:70%;
            height:1px ;
           left:15%;top:50%;
           background-color:#4196f6;
        }
        .addPhotoes::before{
            content:"";
            display:block;
            position:absolute;
            width:1px;
            height:70% ;
           left:50%;top:15%;
           background-color:#4196f6;
        }
         .addPhotoes input[type="file"] {
            position: absolute;
            /*font-size: 100px;*/
            right: 0;
            top: 0;
            opacity: 0;    height: 100%;
            width: 100%;
        }
         .lis{
             min-width:222px;min-height:162px;float:left;padding:0px;display:flex;margin:0;
              flex-wrap: wrap;align-content: flex-start;
         }
         .lis li{
             border:1px dashed #4196f6;padding:20px  0 0 20px;border-radius:3px;flex:1;
             display:inline-block;position:relative;width:200px;height:140px;margin-right:10px;
         }
         .lis li img{
             display:block;width:180px;height:120px;margin: auto;
         }
         .deletePhoto{
              position:absolute;text-align: center;
            top:10px;border-radius: 50%;width:20px;height:20px;line-height: 20px;
            left:10px;color:white;background-color:#3D97ED;
         }
         .changePhoto{
                text-align: center;
                float:left;
                padding:15px 10px;
                background-color: #4196f6;
                width:120px;margin-right:20px;
                border-radius: 3px;position: relative;
                color: white;
        }

结构

<body>
    <div class="main">
        <ul id="lis" class="lis" style="display:none;margin-bottom:0;overflow:hidden;">
        </ul>
        <span class="addPhotoes" id="addPhotoes">
            <!--添加图片-->
            <input type="file" name="" id="fileIt" multiple="multiple">
        </span>
            <button class="changePhoto" id="sureReplaceAll">确定修改</button>
    </div>
</body>

引入jquery.js

<script src="jquery-1.10.2.js"></script>

JS代码

var msg = "您可以上传png, jpg, 或者gif格式的图片";
        //转换成blob
        function getObjectURL(file) {
            var url = null
            if (window.createObjectURL != undefined) { // basic    
                url = window.createObjectURL(file)
            } else if (window.URL != undefined) { // mozilla(firefox)    
                url = window.URL.createObjectURL(file)
            } else if (window.webkitURL != undefined) { // webkit or chrome    
                url = window.webkitURL.createObjectURL(file)
            }
            return url;
        }
        //base64检测上传文件是图片
        function validateImg(data) {
            var pos = data.indexOf(",") + 1;
            for (var e in filter) {
                if (data.indexOf(filter[e]) === pos) {
                    return e;
                }
            }
            return null;
        }
let flag = $("#lis li").length; 
//获取图片&展示图片
 if (flag == 0 || flag < 0) {
            $("#lis").hide()
        } else {
            $("#lis").show()
        }
        $("#fileIt").change(function () {
            // var file = this.files[0];
            let fl = this.files.length;
            if (flag + fl > 5) {
                alert("上传图片达到最大限制,最多上传5张");
                return
            }
            for (var i = 0; i < fl; i++) {
                var file = this.files[i];
                if (file != undefined) {
                    var imgBlobSrc = getObjectURL(file);
                    //blob
                    if (imgBlobSrc) {
                        if (!/image\/\w+/.test(file.type)) { alert(msg);}//检测上传文件是图片
                        else {
                            flag++
                            let ss = $("#lis li").length
                            if (flag != 0) {
                                $("#lis").append('<li><input type="file" name="" capture="camera"><img class="ps" src="' + imgBlobSrc + '" alt="" ><span class="deletePhoto">x</span></li>')
                            }
                            $("#lis").show()
                            if (flag == 5 || flag > 5) {
                                $("#addPhotoes").hide()
                            } else {
                                $("#addPhotoes").show()
                            }
                        }
                    }
                    //base64
                    //if (window.FileReader) {
                    //    var reader = new FileReader();
                    //    reader.readAsDataURL(file);
                    //    //监听文件读取结束后事件
                    //    reader.onloadend = function (e) {
                    //        imgsrc = e.target.result.split(",")[1]
                    //        //e.target.result就是最后的路径地址
                    //            flag++
                    //            let ss = $("#lis li").length
                    //            $("#lis").append('<li><input type="file" name="" capture="camera"><img class="ps" src="' + imgBlobSrc + '" alt="" ><span class="deletePhoto">x</span><p style=""></p></li>')
                             
                    //    };
                    //}
                }
            }
        });
 //删除图片
        $("#lis").on("click", ".deletePhoto", function () {
            $(this).parent().remove()
            flag--

            if (flag == 5 || flag > 5) {
                $("#addPhotoes").hide()
            } else {
                $("#addPhotoes").show()
            }
            if (flag == 0 || flag < 0) {
                $("#lis").hide()
            } else {
                $("#lis").show()
            }
        })
        
        //确定修改--图片上传
        $("#sureReplaceAll").on("click", function () {
            var photoArr = []
            for (var i = 0; i < $("#lis li").length; i++) {
                photoArr[i] = $("#lis li").eq(i).children("img")[0].currentSrc
            }
            console.log(photoArr)//blob
            if (photoArr == "") {
                alert("未上传图片")
                return
            }
            //$.ajax({
            //    url: "...",
            //    type: 'post',
            //    data: { photoArr: photoArr },
            //    dataType: 'json',
            //    xhr: xhrOnProgress(function (e) {//上传进度


            //    }),
            //    success: function (data) {
            //        alert("修改完毕")
            //    }
            //})
            
        })

//修改单张图片
        $("#lis").on('change', "li input", function () {
            let Ind = $(this).parent("li").index()
            let file = this.files[0];
            if (file != undefined) {
                if (window.FileReader) {
                    var reader = new FileReader();
                    reader.readAsDataURL(file);
                    //监听文件读取结束后事件    
                    reader.onloadend = function (e) {
                        var imgBlobSrc = getObjectURL(file)
                        if (!/image\/\w+/.test(file.type)) { alert(msg); }
                        else {
                            $("#lis li").eq(Ind).find("img").attr("src", imgBlobSrc)
                        }
                    };
                }
            }
        })
$("#lis").on("click", ".deletePhoto", function () {   //删除图片
            $(this).parent().remove()
            flag--
            if (flag == 5 || flag > 5) {
                $("#addPhotoes").hide()
            } else {
                $("#addPhotoes").show()
            }
            if (flag == 0 || flag < 0) {
                $("#lis").hide()
            } else {
                $("#lis").show()
            }
        })
//确定修改并上传
        $("#sureReplaceAll").on("click", function () {
            var photoArr = []
            for (var i = 0; i < $("#lis li").length; i++) {
                photoArr[i] = $("#lis li").eq(i).children("img")[0].currentSrc
            }
            console.log(photoArr)//blob
            if (photoArr == "") {
                alert("未上传图片")
                return
            }
            $.ajax({
                url: "...",
                type: 'post',
                data: { photoArr: photoArr },
                dataType: 'json',
                xhr: xhrOnProgress(function (e) {//上传进度

                }),
                success: function (data) {
                    alert("修改完毕")
                }
            })
        })

ps:需要引入jquery.js

限制最多只能上传5张,这个可以自己改flag的值