美文网首页JavacScript
HTML5实现图片上传1

HTML5实现图片上传1

作者: 羊烊羴 | 来源:发表于2017-10-30 14:41 被阅读0次
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <style>
            #canvas {
                width: 800px;
                height: 500px;
                background-color: red;
            }
        </style>
        <title>Document</title>
    </head>
    <body>
    
    <input type="file" value="file" multiple  id="imgFile">
    
    <img src="" alt="">
    
    </body>
    </html>
    <script src="./jquery.js"></script>
    <script>
        $("#imgFile").change(function (e) {
            var file = this.files[0],
                newImg = window.URL.createObjectURL(file);
            $("img").attr("src", newImg);
            window.URL.revokeObjectURL(file);
            /*
            *打印img src为blob:null/7bb77dab-a404-443d-a963-295f9fe08d47,转化为了一个http格式
            * 兼容性写法
            * window[window.webkitURL?'webkitURL':'URL']['createObjectURL']
              按照一些博客的说法,createObjectURL具有更好的性能,但是在移动端苹果支持性不太好
              需要注意的是通过调用createObjectURL都会创建一个新的URL对象,为了提升性能,有必要在我们确定不使用它时将它释放出来,
              通过revokeObjectURL
            * 例如我们需要加载一张预览图,那么在预览图加载完毕后就没有必要在继续使用这个URL对象了
            * 此时就可以将我们之前通过createObjectURl创建的URl对象释放来优化性能
            * 语法:
            * window.URL.revokeObjectURL(file)
            * */
    
    
        })
    </script>
    <script>
        /*
        关于优化file按钮
    
          <input type="file" id="fileElem" multiple accept="image/*" style="display:none"                   onchange="handleFiles(this.files)">
          <a href="#" id="fileSelect">Select some files</a>
        *
        * accept:指定file可以上传的文件类型,只能配合file使用,不推荐,建议通过后台来控制上传文件的格式
        * 如果规定了该属性那么在我们点击file浏览页面时格式不符合的文件将不会被展示
        * accept="image/gif" 表示只接收GIF和JPEG两种图像
        *
        *
      此时页面只会显示a标签,我们可以通过css来控制a标签样,并且在点击a标签时实际触发file按钮即可
      js部分
            var fileSelect = document.getElementById("fileSelect"),
                fileElem = document.getElementById("fileElem");
    
            fileSelect.addEventListener("click", function (e) {
                if (fileElem) {
                     fileElem.click();
                 }
                e.preventDefault(); // prevent navigation to "#"
            }, false);
        *
        * 当然,使用label会更好
        * <input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)">
          <label for="fileElem">Select some files</label>
        * */
    </script>
    <script>
        /*
        * 通过change来监听input是否读取了文件
        * */
        $('input[type=file]').change(function () {
            console.log(this.files)
    //对象DOM会提供一个FilelList(files),files为一个数组,代表用户选择的文件,如果用户只选择了一个文件,那我们只考虑第一个文件
    //file对象的属性
            /*
            name:文件名称
            size:使用bytes描述的文件大小  单位B
            type:文件类型,例如图片的是:"image/png"
            * */
            var file = this.files[0];
    
            /*
            * H5新API,允许web程序读取储存在用户计算机上的文件内容,但是必须是在用户同意之后才能进行该操作,表示用户同意该操作的行为有
            * 1.input type=file 返回的FileList对象
            * 2.拖拽操作生成的DataTransfer
            * 3.HTMLCanvasElement上执行mozGetAsFile()方法返回结果
            *
            *
            * */
            var reader = new FileReader();
            /*方法
            * abort() 终止文件读取操作
            * readAsArrayBuffer(file) 异步按照字节读取文件内容,结果用ArrayBuffer对象表示
            * readAsBinaryString(file) 异步按照字节读取文件内容,结果为文件的二进制串
            * readAsDataURL(file) 异步读取文件内容,结果用data:url的字符串形式表示,也就是说会将图片转化为base64格式
            * readAsText(file,encoding) 异步按字符读取文件内容,结果用字符串形式表示
            *
            * */
            /*事件
            * onabort 当读取操作被中止时调用
            * onerror 当读取操作发生错误时调用
            * onload 当读取操作成功时调用
            * onloadend 当读取操作完成时调用,不管成功还是失败
            * onloadstart 当读取操作将要开始之前调用
            * onprogress 在读取数据过程中调用
            * */
    //      读取图片转化为base64格式输出
    //        reader.readAsDataURL(file);
    
    //        读取文本输出UTF-8格式
    //        reader.readAsText(file,'utf-8')
    
    //        读取文本为二进制字节
            reader.readAsArrayBuffer(file)
    
            reader.onload = function () {
    
    // 通过 reader.result 来访问生成的 DataURL
    //            $("img").attr("src", reader.result)
                console.log(reader);
            };
        });
    </script>
    

    参考文章:
    FileReader对象
    Using files from web applications

    相关文章

      网友评论

        本文标题:HTML5实现图片上传1

        本文链接:https://www.haomeiwen.com/subject/dkwppxtx.html