添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
type="file" 规定该input仅用于上传文件
accept="image/* " 规定支持任何图片格式
onchange="imgChange(this)" 绑定change事件,监听文件的上传

抛出问题2:页面如何展示图片

  • 使用blob
  • 使用base64
  • 1.首先监听上传的图片

    FileList对象来自于HTML的files属性,可以通过e.files访问,当上传图片时会触发onchange事件,通过e.files拿到当前上传图片的信息
    image.png

    function imgChange(e) {
          console.log(e.files);
    

    2.处理图片信息

    2.1 使用FileReader对象读取文件

    const fileReader = new FileReader();
    fileReader.readAsDataURL(e.files[0]);
    fileReader.addEventListener("load", function () {
    	let res = fileReader.result;
    	document.querySelector("#img_base_64_show").src = res;
    	console.log(res);
    监听filereader的load事件,通过filereader.result可以获取图片的base64格式,可以用于页面的图片展示

    2.2 使用blobUrl来展示

    let file = e.files[0];
          var blob = new Blob([file], { type: file.type });
          var url = URL.createObjectURL(blob);
          console.log(blob, url);
          document.querySelector("#img_show").src = url;
    

    image.png

    Blob URL 是通过将 Blob 对象生成一个 URL 来实现展示二进制文件的方式。

    Base64 和 Blob URL 展示图片的优缺点

    Base64

    Base64 是一种将二进制数据编码成 ASCII 字符串的方法。前端中通常使用 Base64 来解决图片、音频等二进制文件无法直接传输的问题。下面是 Base64 的优缺点:

  • 方便传输:Base64 可以通过 HTTP 协议直接传输,无需额外的请求。
  • 简化操作:使用 Base64 可以避免一些繁琐的操作,如在服务器端对图片进行处理,通过代码上传至 CDN 等步骤。
  • 减轻服务器压力:使用 Base64 可以减轻服务器端的压力,因为传输的是字符串,可以避免频繁读写硬盘。
  • 增加体积:Base64 编码会使二进制数据的体积增大约三分之一左右,因此会占用更多网络带宽和浏览器内存。
  • 降低加载速度:相比于直接加载本地或远程图片,Base64 编码的图片需要客户端将其转换成二进制数据,并解码成图片,所以会降低页面的加载速度。
  • 不便于缓存: 因为 Base64 图片是内嵌在 HTML 或 CSS 中的,无法像普通图片那样被浏览器缓存。
  • Blob URL

    Blob URL 是通过将 Blob 对象生成一个 URL 来实现展示二进制文件的方式。下面是 Blob URL 的优缺点:

  • 较小体积:相比于 Base64 编码的字符串,Blob URL 只有一个字符串地址,因此在大小上会更加小巧。
  • 快速加载:由于只需要加载一条 URL 地址,而不需要额外进行转换操作,因此大大提高了页面的加载速度。
  • 可被浏览器缓存:与常规的图片 Url 相同,Blob URL 的图片可以被客户端浏览器本地缓存,提高用户访问速度。
  • 不便传输:Blob URL 生成的 URL 只能在浏览器中使用,无法直接传输给服务器端。
  • 获取困难:获取 Blob 对象并不像获取 Base64 数据那样方便,需要通过 XMLHttpRequest、FileReader 等对象才能得到 Blob 对象。
  • 兼容性问题:Blob URL 在 IE10 及以下版本浏览器不支持,在移动端 iOS 系统上也有兼容性问题。
  • 总的来说,Base64 和 Blob URL 都有各自的优点和缺点,我们在实际开发中需要根据实际情况选择使用哪种方式。如果你需要传输文件到服务器端、需要跨域访问则可以使用 Base64 编码;如果要保证加载速度、可被浏览器缓存,那么建议使用 Blob URL 的方式展示图片。

    1.前端展示的话可以使用BlobUrl来做,后端存储的话,可以将base64存放在后端,如Minio中。在拿到数据后,前端转化为BlobUrl进行展示。
    2.通过input元素可以实现图片的上传,在一些组件库中,可以隐藏input框,来美化图片上传控件。
    3.同样的,上述图片的展示也可以用于pdf的展示,使用HTML<embed>元素将外部内容嵌入文档中的指定位置。

  •