zoukankan      html  css  js  c++  java
  • 关于图片上传实现方案

    一、实现方案(一)

      1、通过window.URL.createObjectURL(兼容性较好),实现起来稍微复杂些。

    <!DOCTYPE html>
    <html>
    <head>
        <title>uploadImg</title>
    </head>
    <style type="text/css">
        #container{
            display: flex;
            flex-direction: column;
            align-items: center;
        }
        .upload{
            width: 400px;
            height: 30px;
            display: inline-block;
            line-height: 30px;
            background: #f0f0f0;
            border: 1px solid #ccc;
            position: relative;
            text-align: center;
        }
        #upload{
            position: absolute;
            left: 0;
            top: 0;
            width: 100%;
            height: 100%;
            opacity: 0;
            cursor: pointer
        }
        #postImg{
            margin-top: 20px;
        }
        #imgBox {
            overflow: hidden;
        }
        #imgBox .imgContainer{
            float: left;
            width: 32%;
            margin-left: 5px;
            margin-top: 20px;
            position: relative;
        }
        #imgBox .imgContainer .delete{
            position: absolute;
            left: 0px;
            bottom: 0px;
            height: 30px;
            line-height: 30px;
            background: rgba(25,25,25,.5);
            margin: 0;
            width: 100%;
            text-align: center;
            color: #f0f0f0;
            cursor: pointer;
            display: none;
        }
        #imgBox .imgContainer:hover .delete{
            display: block;
        }
        #imgBox img{
            width: 100%;
            height: 150px;
            vertical-align: bottom;
        }
        #zoomBox{
            width: 100%;
            height: 100%;
            position: absolute;
            left: 0;
            top: 0;
            background: rgba(23,23,23,.7);
            z-index: 1000;
            display: flex;
            align-items: center;
            justify-content: center;
            flex-direction: column;
        }
        #zoomBox img{
            max-width:100%;
            z-index: 1001;
        }
        #zoomBox p{
            color: #fff;
            cursor: pointer;
            z-index: 1001;
        }
    </style>
    <body>
        <form id="container">
            <span class="upload">点击上传<input id="upload" type="file" multiple accept="image/png,image/jpg,image/gif,image/JPEG"></span>
            <div id="imgBox"></div>
            <input id="postImg" type="button" name="" value="上传">
        </form>
    </body>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <script type="text/javascript">
        var imgSrc = [];
        var imgFile = [];
        var imgName = [];
        //监听选择图片的change事件
        $("#upload").on("change",function(){
            getImgObj()
        })
        //获取图片相关信息
        function getImgObj(){        
            var imgObj = $("#upload")[0].files;
            for(var i=0; i<imgObj.length; i++){
                var imgSrcI = getUrl(imgObj[i])
                imgSrc.push(imgSrcI)
                imgFile.push(imgObj[i])
                imgName.push(imgObj[i].name)
            }
            addNewContent()
        }
        //获取图片URL
        function getUrl(file){
               var url = null;
            if (window.createObjectURL != undefined) {
                url = window.createObjectURL(file);
            } else if (window.URL != undefined) {
                url = window.URL.createObjectURL(file);
            } else if (window.webkitURL != undefined) {
                url = window.webkitURL.createObjectURL(file);
            }
            return url;
        }
        //添加dom
        function addNewContent(){
            $("#imgBox").html("")
            for(var i =0; i<imgSrc.length; i++){
                var oldObj = $("#imgBox").html()
                $("#imgBox").html(oldObj + '<div class="imgContainer"><img onclick="zoom(this,'+i+')" title=' + imgName[i] + ' alt=' + imgName[i] + ' src=' + imgSrc[i] + '><p class="delete" onclick="Delete(this,'+i+')">删除</p></div>');
            }
        }
        //删除
        function Delete(obj,index){
            imgSrc.splice(index, 1);
            imgFile.splice(index, 1);
            imgName.splice(index, 1);
            addNewContent()
        }
        //放大
        function zoom(obj,index){
            var html = "<div id='zoomBox'><img src=" + imgSrc[index] + "><p onclick='closeZoom()'>关闭</p></div>"
            $("body").append(html)
        }
        //关闭
        function closeZoom(){
            $("#zoomBox").remove()
        }
        //提交
        $("#postImg").click(function(){
            var data = new FormData()
            data.append("imgFile",imgFile)
            console.log(data)
            return false
        })
    </script>
    </html>

    2、通过原生js实现预览

    <!DOCTYPE html>
    <html>
    <head>
        <title>图片上传</title>
    </head>
    <body>
        <form id="imgForm">
            <div id="box"></div>
            <input id="imgInput" type="file" name="" value="上传图片" multiple>
        </form>
    </body>
    <script type="text/javascript">
        var img = document.getElementById("imgInput")
        var imgArr = [];
        var imgUrl = [];
        var imgobj = [];
        img.onchange=function(){
            var imgs = img.files
            for(var i = 0; i<imgs.length; i++){
                imgArr.push(imgs[i])
            }
            //通过window对象下的URL相关属性
            var createObjUrl = function(blob){
                return window[window.webkitURL ? 'webkitURL' : 'URL']['createObjectURL'](blob);
            }
            for(var i in imgArr){
                imgUrl.push(createObjUrl(imgArr[i]))
                var imgObj = new Image()
                imgObj.src = imgUrl[i]
                document.getElementById("box").appendChild(imgObj)
            }
        }
    </script>
    </html>

    3、原理

      1、浏览器提供的window.URL.createObjectURL(参数)  参数部分为图片对象。

      2、通过input[file]监听onchange事件的触发,从而获取files对象。并通过便利files对象(一个类似数组),将图片对象过滤出来。

    二、实现方案(二)

      1、通过FileReader对象(兼容性待考究)

    <!DOCTYPE html>
    <html>
    <head>
        <title>图片上传之FileReader</title>
    </head>
    <style type="text/css">
        #box{
            width: 200px;
        }
        #box img{
            max-width: 100%;
        }
    </style>
    <body>
        <input type="file" name="" id="imgBtn" multiple>
        <div id="box"></div>
    </body>
    <script type="text/javascript">
        var imgBtn = document.getElementById('imgBtn')
        imgBtn.onchange = function(){
            var imgFile = imgBtn.files[0];
            var imgObj = new FileReader()
            imgObj.onload = function(imgFile){
                var prevImg = new Image()
                prevImg.src = imgFile.target.result;
                document.getElementById('box').appendChild(prevImg)
            }
            imgObj.readAsDataURL(imgFile)
        }
    </script>
    </html>
  • 相关阅读:
    对png空白部分取消button事件教程
    Flash Builder4.6破解方案(绝对有效)
    网页程序Flex动态嵌入字体
    老虎机等转动图片思路
    我认为最佳的新手引导制作办法
    26
    sql server 2005建立数据库,表,约束,账户密码,权限,基本查询删除语句
    ASP.NET入门教程:ASP.NET和ASP区别
    .net面试题及答案(一)(转)
    ASP.NET入门教程:认识ASP.NET
  • 原文地址:https://www.cnblogs.com/helloNico/p/11244336.html
Copyright © 2011-2022 走看看