美文网首页
js图片上传预览

js图片上传预览

作者: daixi859 | 来源:发表于2017-05-05 00:35 被阅读107次

项目中碰到一个需求,上传图片及时给用户预览。
开始的想法就是上传的图片先传递到后台,在通过ajax获取图片路径显示到前台。但这样做首先对后端开销比较大,也需要专门写一个接口来处理这个问题。能不能直接通过前端来解决呢?

翻了一下html5新的File API,发现有个FileReader类型,可以完美解决这个问题。

File API

file表单元素的files属性,可以获取文件对象数组。
通过file.files[0]可以获取对应的文件对象,一般有,larstModified,name,size,type几个属性。

<input type="file" id="file">
<script type="text/javascript">
    var file = document.getElementById('file');
    file.onchange = function() {
        console.log(this.files[0].name, this.files[0].type, this.files[0].size);
    }
</script>

当然这对图片上传预览没什么用,重要的是FileReader类型:

FileReader

FileReader提供如下的几个方法

  • readAsText(file [, encoding]):以纯文本读取文件,读取到的结果返回。第二个参数为编码类型,可选。
  • readAsDataURL(file):将文件数据以URL的形式返回(常用来处理图片)。
  • readAsBinaryString(file):将文件以字符串形式返回(字符串中每个字符表示一字节)。
  • readAsArrayBuffer(file):将文件内容的ArrayBuffer返回。

FileReader提供了几个事件

  • progress:传输过程触发的事件,事件对象有lengthComputable, loaded, total, result属性
  • error:传输失败触发
  • load:传输完成触发

案例:

<body>
    <input type="file" id="files">
    <div id="progress"></div>
    <div id="prvid">预览容器</div>

    <script type="text/javascript">
        var files = document.getElementById('files');
        var output = document.getElementById('prvid');
        var progress = document.getElementById('progress');

        files.onchange = function(ev) {
            var file = ev.target.files[0];
            var reader = new FileReader();

            if (/image/.test(file.type)) {
                reader.readAsDataURL(file);
                type = 'image';
            } else {
                reader.readAsText(file);
                type = 'text';
            }

            reader.onerror = function() {
                output.innerHTML = '文件读取失败';
            }

            reader.onprogress = function(event) {
                if (event.lengthComputable) {
                    progress.innerHTML = event.loaded + '/' + event.total;
                }
            }

            reader.onload = function() {
                var html = '';
                switch(type) {
                    case 'image':
                        html = '![](' + reader.result + ')';
                        break;
                    case 'text':
                        html = reader.result;
                        break;
                }
                output.innerHTML = html;
            }
        }
    </script>
</body>

相关文章

  • js图片上传预览

    项目中碰到一个需求,上传图片及时给用户预览。开始的想法就是上传的图片先传递到后台,在通过ajax获取图片路径显示到...

  • JS图片上传预览

    划水摸鱼的时候研究了JS图片的上传预览,分别是FileReader()、createObjectURL(),在此分...

  • Laravel 中 bootstrap fileinput 图

    1、 图片上传并预览 效果展示: 2 图片上传成功之后的预览 图片上传之后编辑预览效果展示: 3 图片预...

  • JS 上传图片实时预览

    html 代码 表单form 不要忘了加enctype="multipart/form-data" js 代码

  • JS图片上传预览(一)

    URL.createObjectURL()静态方法会创建一个 DOMString。其中包含一个表示参数中给出的对象...

  • js上传图片实时预览

  • js图片压缩预览

    图片压缩预览(具体上传请看另外一篇文章,讲解的更详细图片压缩上传) html结构 js代码 css代码 欢迎访问我...

  • 图片上传前预览需求

    图片上传前预览需求 很多业务场景下,我们需要在用户上传图片前,先预览待上传的图片

  • vue多图上传到阿里云

    结合这两篇文章小程序选择图片、预览,上传到阿里云和阿里云上传图片 引入js 做循环判断上传成功后再上传下一张图 循...

  • 利用html5 完成图片上传、预览、删除

    接上次 html js 压缩图片函数 预览图片删除 css,主要改了h5图片上传的样式,还有预...

网友评论

      本文标题:js图片上传预览

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