JavaScript 上传文件并展示

JavaScript 上传文件并展示文章目录 js 的拖拽上传 并在页面中展示文章目录前言一 js 实现拖拽功能 文件拖拽到指定位置 二 关于怎么读取文件内容 用到 FileRead 对象 1 第一步 遍历传递过来的 file2 第二步 判断传递过来的文件是否是图片格式 3 第三步 创建 newFileRead 对象 然后拿到创建的对象调用 readAsDataUR f 方法 4 第四步 newFileRead 对象中的 onload 方法 通过 e target result 获取到当前图片的 base64 地址 然后给图片的 src 问

文章目录


前言

本次实现的功能,也可以通过更改事件属性:转变成点击然上传文件的转变(点击上传文件这里就不在展示了,基本思路都很像!!)


话不多说,直接上代码!!!

一、js实现拖拽功能(文件拖拽到指定位置)

div.addEventListener(‘dragenter’, denter);
div.addEventListener(‘dragover’, dover);
div.addEventListener(‘drop’, dp)
绑定了三个事件分别是: 1.拖拽文件进入div 2.拖拽文件在div上 3.鼠标松开






 <div class="box"></div> <script> let div = document.querySelector('.box'); div.addEventListener('dragenter', denter); div.addEventListener('dragover', dover); div.addEventListener('drop', dp) function denter(e) { 
      e.preventDefault(); } function dover(e) { 
      e.preventDefault(); } function dp(e) { 
      e.stopPropagation(); //阻止事件冒泡 e.preventDefault();//阻止默认事件 (上面的都一样) //拿到拖拽的文件 var file = e.dataTransfer.files //调用函数传递文件的内容,然后进行解析转化为bas64格式的内容 handFiles(file); } </script> 

二、关于怎么读取文件内容(用到FileRead()对象)

1.第一步:遍历传递过来的file

2.第二步:判断传递过来的文件是否是图片格式

3.第三步:创建 new FileRead() 对象,然后 拿到创建的对象调用 readAsDataURL(f) 方法

4.第四步: new FileRead()对象中的 onload方法,通过 e.target.result :获取到当前图片的base64地址,然后给图片的src

代码如下(示例):

function handFiles(file) { 
      for (let index = 0; index < file.length; index++) { 
      var f = file[index]; //判断是否是图片 var imageType = /^image/ if (!imageType.test(f.type)) { 
      continue }; //创建图片 var im = document.createElement('img'); /* im.classList.add('obj'); */ div.appendChild(im); //读取文件对象 var reader = new FileReader(); //读取文件对象 //通过reader开始读取内容,一旦读取成功,会在result属性中获取一个base64的字符串 //读取文件是一个异步过程 reader.readAsDataURL(f); //这里使用了一次立即执行函数(解决的问题是变量作用域带来的问题) reader.onload = function(aimg) { 
      //第一种直接给src赋值 // im.src = e.target.result  return function(e) { 
      aimg.src = e.target.result; } }(im) } } 

问题(解决方案):

这个方法的案例,容易在修改图片地址的位置,出现变量作用域的问题导致图片地址无法被正常更改,解决方法:①使用闭包函数解决 ②使用立即执行函数 ③将所有的变量都用 es6 的let声明.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208564.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午11:17
下一篇 2026年3月19日 上午11:18


相关推荐

  • SQL语句大全实例

    SQL语句实例 表操作  例1 对于表的教学管理数据库中的表STUDENTS,可以定义如下:  CREATE TABLE STUDENTS  (SNO     NUMERIC(6,0)NOTNULL  SNAME   CHAR(8)NOTNULL  AGE     NUMERIC(3,0)  SEX

    2022年4月3日
    70
  • Enterprise Library 使用

    Enterprise Library 使用转自:http://blog.csdn.net/tuo19840423/article/details/5687757 安装EnterpriseLibrary,添加DAAB应用程序块1. 在配置工具中修改属性2. 直接在项目的Web.config文件中修改属性二.          具体项目中设置1. 在项目参照设定中 引入所需Ent

    2022年10月20日
    5
  • 【C语言】getchar 函数的正确使用

    【C语言】getchar 函数的正确使用目录一、getchar函数二、缓冲区1、什么是缓冲区2、为什么要存在缓冲区3、缓冲区的类型4、缓冲区的刷新三、getchar函数的正确使用1、getchar的换行问题2、getchar与scanf的混合使用一、getchar函数从上面的介绍来看,我们要正确使用getchar函数,首先得了解什么是缓冲区。二、缓冲区1、什么是缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

    2022年10月19日
    4
  • java实现int数组转String

    java实现int数组转Stringint array 1 2 3 4 5 6 7 8 9 10 System out println array toString 输出是 I 64c64813 手写方法 publicString int array StringBuffer newStringBuf f

    2026年3月26日
    2
  • 灵动标签的使用方法 ecms通过运行sql获取须要的记录

    灵动标签的使用方法 ecms通过运行sql获取须要的记录

    2021年12月9日
    44
  • 一点想法

    一点想法

    2021年8月23日
    65

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号