zoukankan      html  css  js  c++  java
  • 前端上传那些事

    选择图片

      选择图片有什么好讲的呢?不就一个 input[type=file] ,然后点击就可以了吗?确实是这样的,但是,我们想要做得更加的友好一些,比如需要过滤掉非图片文件, 或只允许从摄像头拍照获取图片等,还是需要进行一些简单配置的。

    <input type="file" />

       点击选择文件可以查看到非图片类型的文件,这并不是我们想要的结果,毕竟我们只想要图片类型。可以通过 accept 属性来实现,如下:

      <input type="file" accept="image/*">

      这样就可以过滤掉非图片类型了。但是图片的类型可能也太多了, 有些可能服务器不支持,所以,如果想保守一些,只允许 jpg 和 png 类型,可以写成这样:

    <input type="file" accept="image/jpg, image/jpeg, image/png">
    或者
    <input type="file" accept=".jpg, .jpeg, .png">

    预览图片

      在远古时代,前端并没有预览图片的方法。当时的做法时,用户选择图片之后,立刻把图片上传到服务器,然后服务器返回远程图片的 url 给前端显示。这种方法略显麻烦,而且会浪费用户的流量,因为用户可能还没有确定要上传,你却已经上传了。幸好,远古时代已经离我们远去了,现代浏览器已经实现了前端预览图片的功能。常用的方法有两个,分别是 URL.createObjectURL() 和 FileReader 。虽然他们目前均处在 w3c 规范中的 Working Draft 阶段, 但是大多数的现代浏览器都已经良好的支持。本文只对URL.createObjectURL()用法小作介绍

      URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的 URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。用法用下

    objectURL = URL.createObjectURL(object);

    其中,object 参数指 用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象。对于我们的 input[type=file] 而言, input.files[0] 可以获取到当前选中文件的 File 对象。示例代码如下:

    <body>
      <input type="file" accept="image/*" id="input"/>
      <br/>
      <!-- 显示图片 -->
      图片<br/>
      <img src="" title="hahahah" alt="暂无" id="img" style=" 200px; height:200px;font-size: 12px;" />
    
      <script>
        var img = document.getElementById('img')
        var input = document.getElementById('input')
        function handlerFileShow(e) {
          const { target: { files } } = e
          console.log(URL.createObjectURL(files[0]))
          img.src = files[0] ? URL.createObjectURL(files[0]) : ""
        }
        input.addEventListener('change', handlerFileShow, false)
      </script>
    </body>
  • 相关阅读:
    代理模式
    适配器模式
    策略模式
    原型模式
    内存溢出
    jvm常用参数
    单例模式
    抽象工厂
    工厂方法模式
    选择器代码
  • 原文地址:https://www.cnblogs.com/gagaran/p/14500390.html
Copyright © 2011-2022 走看看