input上传图片并且实现预览

2023-05-16

文章目录

  • 前言
  • 一、确定思路
  • 二、书写代码
    • 1.HTML部分
    • 2.CSS部分
    • 3.JS部分(重点)
      • 3.1.点击选择图片按钮,调用input文件框事件的的代码
      • 3.2.转换格式
      • 3.3.发送图片给后端
  • 三、编写优化
    • 1.input文件框设置accept属性


前言

在网站中,上传图片这个功能,这个还是挺常见的。比如说:在填写信息中,上传头像中。
点击选择头像


提示:以下是本篇文章正文内容,下面案例可供参考

一、确定思路

在这里插入图片描述

整个功能,大致可以分为三个步骤。

  • 点击选择图片的按钮,从本地选择一张图片。(选图片)
  • 选择好之后,会进行预览。就好比自己微信要换头像,选择好之后,都会有预览的步骤。(预览)
  • 点击确认上传的按钮,将选择好的图片,上传到后端。(上传)

二、书写代码

1.HTML部分

代码如下(示例):

<button id="select_img_button">选择图片</button>
<input type='file' id="inputImgFile" style="display:none" accept="image/*" />

<!-- 预览图片S -->
<img src="" width="120" />
<!-- 预览图片E -->

<button id="resureUpload">确认上传</button>

在HTML部分中,其实要用到的DOM还是很少的。不过在整个功能开发过程中,是需要有一个input框选择图片用的。不过为了美化,将这个input文件选择框进行了隐藏。不过这个框,隐藏了的话,我们还是可以通过JS调用这个input框的方法来实现选择图片。下面js部分会讲到。

2.CSS部分

这一部分就自由发挥吧

3.JS部分(重点)

这个部分还是挺关键的。写JS是分为以下步骤进行的。
  • 点击选择图片按钮,调用Input框的onclick事件方法,从而实现选择图片
  • 将选择到的图片,转化为base64的形式
  • 最终将图片发往后端

3.1.点击选择图片按钮,调用input文件框事件的的代码

代码如下(示例):

select_img_button.onclick = function(){
    var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;

      if (ie) {
        inputImgFile.click();
      } else {
        var a = document.createEvent("MouseEvents");
        a.initEvent("click", true, true);
        inputImgFile.dispatchEvent(a);
      }
}

3.2.转换格式

当选择好图片之后,可以通过input框onchange事件,获取到刚才选择的图片。下一步之后就是预览了。获取到图片之后,需要将图片转为base64格式,这样子浏览器才能看懂,也就是说才能预览


代码如下(示例):

inputImgFile.onchange = function(){
    my_data = inputImgFile.files[0];
    // 获取上传图片信息
    var reader = new FileReader();
    // 监听reader对象的的onload事件,当图片加载完成时,把base64编码賦值给预览图片
    reader.addEventListener("load", function () {
        show_img.src = reader.result;
        }, false);
      // 调用reader.readAsDataURL()方法,把图片转成base64
      reader.readAsDataURL(my_data);
}

在readfFile方法中,文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null

3.3.发送图片给后端

这一部分是点击确认上传的按钮,通过formdata方法和ajajx方式,将图片上传给后端。

resureUpload.onclick = function(){
    var files = inputImgFile.files ? inputImgFile.files : [];
    // 获取上传图片的信息
    if (!files.length || !window.FileReader) {
      alert("当前浏览器不支持HTML5,请更新浏览器");
      return false;
    }
    
    var fd = new formData(); 
    fd.appchild("file",files[0]);
    
    var xhr = new XMLHTTPRequest();
    xhr.open("post", "后端上传地址");
    xhr.send(fd);
      xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
          if (xhr.status == 200) {
            console.log("上传成功");
          }
        }
      }
}

三、编写优化

1.input文件框设置accept属性

在编写过程中,可以在input type=‘file’ 中添加accept="image/*"属性内容,规定用户只能选择的文件是图片。一来可以进一步优化代码,也可以减少用户乱传文件。

代码如下(示例):

<input type="file" accept="image/*"/>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

input上传图片并且实现预览 的相关文章

随机推荐

  • MapReduce实验——学生总成绩报表,学生平均成绩

    学生总成绩报表 Map类 span class token keyword package span span class token class name StudentScore 06 span span class token pun
  • 【Docker操作必看,原来这才是正确打开Docker的新方式】

    前言 一 Docker操作镜像 首先镜像名称一般分为两个部分 xff1a repository tag xff0c 前者是镜像名 xff0c 后者是版本号 在没有指定tag的情况下 xff0c 默认是latest 代表的是最新版本 1 拉取
  • 第五章 FreeRTOS 任务基础知识

    5 1 什么是多任务系统 在使用 51 AVR STM32 单片机裸机 未使用系统 的时候一般都是在main 函数里面用 while 1 做一个大循环来完成所有的处理 xff0c 即应用程序是一个无限的循环 xff0c 循环中调用相应的函数
  • C语言for循环详解

    for 循环的使用更加灵活 xff0c 在日常的程序开发过程中我们会使用的更多一些 使用 while 循环来计算1加到100的值 xff0c 代码如下 xff1a include span class token generics func
  • Python批量下载sci-hub文献

    coding utf 8 import requests from bs4 import BeautifulSoup import os re path 61 34 Downloaded 34 if os path exists path
  • Ubuntu16.04 安装NS3.36.1及可视化模块

    如果不是必要 xff0c 尽量不要在Ubuntu 16 04上装3 36 1这个版本 xff0c 因为比较麻烦 NS3 36 1的新特性 安装依赖 一条一条执行 xff01 xff01 xff01 ns3 36需要用的python3 xff
  • ES6模块化及ES7新增特新性

    一 babel ES6代码转换为ES5的代码 1 初始化项目 npm init npm init y 不需要配置 xff0c 直接跳过 2 安装转码工具 cnpm install g babel cli cnpm install save
  • GNU Radio中的消息传递机制(Message Passing)

    目录 0 首先看下 GR 中一些常用术语的官方解释 1 定义理解 2 消息传递端口API 3 消息处理函数 4 通过流程图连接消息 5 从外部源发布数据 6 使用消息传送命令 7 一个消息传输的例子 0 首先看下 GR 中一些常用术语的官方
  • 单片机零基础完整攻略-1

    序 xff1a 学习原因 在网上看到各路大神用一个小小的板子就能玩起来一些很有趣的小项目 xff0c 觉得非常之神奇 为什么一个小小的板子就能做到物联网 xff0c 机器人那么多花里胡哨的功能 xff1f 正好赶上学校开设了这门课 xff0
  • HDF5 header version与HDF5 library不匹配问题的解决

    如图 xff1a 试着安装这个 conda install c conda forge hdf5 61 1 10 5 conda不行用pip 还不行就去这个网站下载 xff0c 上面搜索框直接搜hdf5 xff0c 然后找1 10 5版本的
  • Vscode C++的基础配置文件以及无法产生可编译文件exe的处理方法(undefined reference)

    采用排除法 xff1a 1 是否将工作文件夹添加工作区 xff1f 打开vscode 文件 打开文件夹 文件 将文件夹添加工作区 xff08 或者另存为一个 xff09 xff0c 把工作区文件放到工作文件夹里 如下 xff1a Manag
  • Arduino零基础实践2——串口数据发送

    具体的原理在微机开发中详细介绍了 xff0c 下面直接使用arduino进行数据收发 13条消息 单片机攻略4 中断和串口 r135792uuuu的博客 CSDN博客 void setup Serial begin 9600 void lo
  • px4开发bug记录

    一 仿真问题 1 roslaunch无法启动px4 gazebo的无人机仿真 xff0c 但是make px4 sitl gazbeo可以正常启动 2 make px4 sitl gazbeo启动到一半无法启动 xff0c 显示无法连接ga
  • linux无损扩容

    linux笔记本上空间不够用了 xff0c 重新从windows里划分30个g出来给linux xff0c 记录一下 1 准备u盘 xff0c u盘里面全部清空 xff0c 不能有任何东西 下载一个Ubuntu的桌面文件 xff0c 大概有
  • Linux更新源 source.list 自定义第三方源

    1 官方默认源 打开软件和更新 xff0c 直接图形化操作 但是只能设置一个源 xff0c 对于下载多种多样的包可能不够 xff0c 所以需要自定义多个不同源 2 自定义添加源 源的文件 sources list在 etc apt sour
  • 现在没有可用的软件包 *** ,但是它被其它的软件包引用了 和 E: 无法定位软件包 ***问题解决

    root 64 zhouls virtual machine snort src apt get install bison flex 正在读取软件包列表 完成 正在分析软件包的依赖关系树 正在读取状态信息 完成 现在没有可用的软件包 fl
  • sdf文件轨范

    sdf文件规范 xff1a a href https www zhihu com org aigraphx posts page 61 3 title 深圳季连AIGRAPHX 知乎 深圳季连AIGRAPHX 知乎 a span style
  • HBase基本操作

    HBase Java API 操作 Tips xff1a 其实每一个操作都可以简化为 xff1a 1 配置并连接数据库 2 编写 Java API 的 HBase 的操作 3 使用权限 执行操作 要对一个Hbase数据库进行操作的话 xff
  • GNU Radio3.8:编辑yaml文件的方法

    GNU Radio 学习使用 OOT 系列教程 xff1a GNU Radio3 8创建OOT的详细过程 基础 C 43 43 GNU Radio3 8创建OOT的详细过程 进阶 C 43 43 GNU Radio3 8创建OOT的详细过程
  • input上传图片并且实现预览

    文章目录 前言一 确定思路二 书写代码1 HTML部分2 CSS部分3 JS部分 xff08 重点 xff09 3 1 点击选择图片按钮 xff0c 调用input文件框事件的的代码3 2 转换格式3 3 发送图片给后端 三 编写优化1 i