最新HTML5中的文件详解

第5章 HTML5中的文件

5.1选择文件

可以创建一个file类型的input,添加multiple属性为true,可以实现多个文件上传。

5.1.1 选择单个文件

1.功能描述

创建file类型input元素,页面中不再有文本框,而是 选择文件 按钮,右侧是上次文件的名称,

初始化时没有上传文件,只显示未选择文件字样,可以选择一个图片文件。

2.实现代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title>
</head>
<body><form id="frmTmp" action="#"><fieldset><legend>上传单个文件:</legend><input type="file" name="feUpload" id="feUpload" /></fieldset></form>
</body>
</html>
3.页面效果

4.源码分析

本例中,单击选择文件后,没编写JS代码,就可以选择文件名称。

5.1.2 选择多个文件

1.功能描述

创建file类型input,添加multiple属性为true,单击选择文件,同时选择3个文件,点击打开按钮后,在按钮右侧会显示这个三个文件的字样,移动鼠标至文字上,显示详细名称和类型。

2.实现代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title>
</head>
<body><form id="frmTmp" action="#"><fieldset><legend>上传多个文件:</legend><input type="file" multiple="true" name="feUpload" id="feUpload" /></fieldset></form>
</body>
</html>
4.源码分析

选择文件后,不在显示文件名称,而是显示成功选择文件的数量,鼠标浮动上面显示全部上传文件详细列表。

5.1.3 使用Blob接口获取文件的类型和大小

Blob(Binary Large Object二进制大对象),表示二进制数据块,Blob接口提供slice方法,可以访问指定长度和类型的字节内部数据块。接口有两个属性,size表示返回的数据块大小,type表示数据块的MIME类型。

1.功能描述

file类型的input元素,multiple属性设为true,选择文件按钮,选取多个文件,页面将以列表的形式展示所选文件名称,类型,大小信息。

2.实现代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><script>function $$(id){return document.getElementById(id);}function getFileList(files){var strLi = "<li class='li'>";strLi=strLi + "<sapn>文件名称</span>,";strLi=strLi + "<sapn>文件类型</span>,";strLi=strLi + "<sapn>文件大小</span>";strLi=strLi + "</li>";for(var i=0;i<files.length;i++){var tmpFile = files[i]strLi=strLi+"<li>";strLi=strLi + "<sapn>"+tmpFile.name+"</span>,";strLi=strLi + "<sapn>"+tmpFile.type+"</span>,";strLi=strLi + "<sapn>"+tmpFile.size+"KB</span>";strLi=strLi + "</li>";}$$("ulUpload").innerHTML = strLi;}</script></head><body><form id="frmTmp"  action="#"><fieldset><legend>上传多个文件:</legend><input type="file" onchange="getFileList(this.files)" multiple="true" name="feUpload" id="feUpload" /><ul id="ulUpload"></ul></fieldset></form></body>
</html>
3.页面效果

4.源码分析

fie类型input选择上传时,触发onChange事件,调用自己定义的getFileList函数,实参是当前文件列表,获取单个文件,返回名称,类型,大小信息,并拼接到strLi中,赋值给ulUpload列表。

5.1.4 通过类型过滤选择文件

1.功能描述

选择多个文件,点击选择文件后,选取文件中存在不符合图片类型的文件,将在页面中显示总数量与文件名称。

2.实现代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title></title><script>function $$(id) {return document.getElementById(id);}function checkFileType(files) {var strP = "", strN = "", j = 0var strFileType = /image.*/;for (var i = 0; i < files.length; i++) {var tmpFile = files[i]if (!tmpFile.type.match(strFileType)) {j = j + 1;strN = strN + tmpFile.name + "<br>"}}strP = "检测到(" + j + ")个非图片格式文件.";if (j > 0) {strP = strP + "文件名如下:<p>" + strN + "</p>";}$$("pTip").innerHTML = strP;}</script>
</head>
<body><form id="frmTmp" action="#"><fieldset><legend>上传过滤类型后的文件:</legend><input type="file" onchange="checkFileType(this.files)" multiple="true" name="feUpload" id="feUpload" /><p id="pTip"></p></fieldset></form>
</body>
</html>
3.页面效果

4.源码分析

以上代码中file对象返回的类型与image正则匹配,若不是图片,将内容保存在变量中,将变量内容显示给p段落。

5.1.5 通过accept属性过滤选择文件的类型

1.功能描述

表单中创建file类型input元素,并在元素中添加accept属性,属性值设为image/gif。

当用户单击选择文件按钮时,选择窗口中,文件类型为accept的值。

accept 属性支持的MIME类型包括但不限于:

  • ‌图片文件‌:image/jpeg、image/png、image/gif等。
  • ‌音频文件‌:audio/mp3、audio/wav等。
  • ‌视频文件‌:video/mp4等。
2.实现代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>通过accept属性过滤某类型上传文件</title>
</head>
<body><form id="frmTmp" action="#"><fieldset><legend>选择某类型上传文件:</legend><input type="file" accept="image/png" name="feUpload" id="feUpload" /></fieldset></form>
</body>
</html>
3.页面效果

4.源码分析

这种方法过滤所选文件类型简单方便,但是不是很有效,及时设置了,不是该类型的元素同样会被选中,也能被文件元素接受,最好的方式是js或者后端再一次进行验证 。

5.2 使用FileReader接口读取文件

使用Blob接口可以获取文件相关信息,如文件名称,大小,类型。

如果需要读取和浏览文件,则需要通过FileReader接口。

该接口不仅可以读取图片文件,还可以读取文本或二进制文件,根据接口提供的事件和方法动态侦查文件的详细状态。

5.2.1 FileReader接口的方法

FileReader提供异步API,可以从浏览器主线程中异步访问文件系统中数据。

读取文件中数据并存入内存中。

访问不同文件,有多个对象,常用方法:

方法名称

参数

功能描述

使用说明

readAsBinaryString()

file

以二进制方式读取文件内容

调用时,将file对象返回的数据块以二进制字符串形式分块读入内存中

readAsArrayBuffer()

file

以数组缓冲的方式读取

调用时,将file对象返回的字节数以数组缓冲的方式读入内存中

readAsDataURL()

file

以数据URL的方式读取

调用时,将file对象返回的数据块以一串数据URL字符形式展现在页面中,通常是较小的文件

readAsText()

file,encoding

以文本编码方式读取

调用时,以编码方式读取数据块按文本方式读入内存中,通常是UTF-8

abort()

读取数据中止时自动触发

如果读取过程中出现错误和异常触发该方法,返回错误信息

5.2.2 使用readAsDataURL方法预览图片

通过此方法可以获取API异步读取的文件数据,另存为数据URL,将URL绑定元素的src属性,可以说实现文件预览效果。

1.功能描述

表单中添加file类型的input元素,设置属性multiple为true,单击选择文件后如果选择图片文件,将在页面中显示。

2.实现代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>5.2.2 使用readAsDataURL方法预览图片</title><style>* {list-style-type: none;}</style><script>function $$(id) {return document.getElementById(id);}function prevImageFile(files) {//检测浏览器是否支持FileReader对象if (typeof FileSystem == undefined) {alert("检测到您的浏览器不支持FileReader对象!")}var strHTML = "";for (var i = 0; i < files.length; i++) {var tmpFile = files[i];var reader = new FileReader();reader.readAsDataURL(tmpFile);reader.onload = function (e) {strHTML = strHTML + "<span>";strHTML = strHTML + "<img width='60px' height='100px' style='margin:0 5px;' src='" + e.target.result + "'/>";strHTML = strHTML + "</span>";$$("ulUpload").innerHTML = "<li>" + strHTML + "</li>"}}}</script>
</head><body><form id="frmTmp" action="#"><fieldset><legend>预览图片文件:</legend><input type="file" multiple="true" onchange="prevImageFile(this.files)" name="feUpload" id="feUpload" /><ul id="ulUpload"></ul></fieldset></form>
</body></html>
3.页面效果

4.源码分析

图片预览过程实质上是图片文件被读取后展示在页面中的过程,考虑到兼容性,先判断浏览器是否支持。

每个文件以URL方式读入页面中,读取成功触发onload事件,通过result属性过去url地址绑定给img元素,

最后通过ul的ID展示到页面中,实现预览效果。

5.2.3 使用readAsText方法读取文本文件

FileReader接口中的readAsText()方法可以将文件以文本编码的方式进行读取,可以读取文本文件的内容。

1.功能描述

表单中添加file类型的input元素,单击选择文件后如果选择文本文件,将在页面中显示文本文件的内容。

2.实现代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>使用fileReader方法读取文本文件</title><script>function $$(id) {return document.getElementById(id);}function readTextFile(files) {//检测浏览器是否支持FileReader对象if (typeof FileSystem == undefined) {alert("检测到您的浏览器不支持FileReader对象!")}var tmpFile = files[0];var reader = new FileReader();reader.readAsText(tmpFile);reader.onload = function (e) {$$("artShow").innerHTML = "<pre>" + e.target.result + "</pre>";}}</script>
</head><body><form id="frmTmp" action="#"><fieldset><legend>读取文本文件:</legend><input type="file" onchange="readTextFile(this.files)" name="feUpload" id="feUpload" /><article id="artShow"></article></fieldset></form>
</body></html>
3.页面效果

4.源码分析

先检测浏览器是否支持FileReader对象,创建一个对象,调用readAsText()方法,

以文本的编码方式读入页面,通过result获取读入的内容,并赋给artShow元素,

同时显示在页面中。

5.2.4 侦听FileReader接口中的事件

FIleReader提供很多常用的事件,可以清晰侦听对象读取文件详细过程(生命周期),常用事件如下:

  • onloadstart 当读取数据开始时触发
  • onprogress 正在读取时触发
  • onabort 读取中止时触发
  • onerror 读取失败时触发
  • onload 读取成功时触发
  • onloadend 请求成功后,无论读取结果如何都触发

正常读取触发的先后顺序:onloadstart-onprogress-onload-onloadend

想要正确获取文件数据,必须在onload中编写代码。

1.功能描述

file类型input点击选择文件选取文件,页面将展示读取文件过程所触发事件的内容。

2.实现代码
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>展示文件读取时触发事件的先后顺序</title><script>function $$(id) {return document.getElementById(id);}function showEvent(files) {//检测浏览器是否支持FileReader对象if (typeof FileSystem == undefined) {alert("检测到您的浏览器不支持FileReader对象!")}var tmpFile = files[0];var reader = new FileReader();reader.readAsText(tmpFile);reader.onload = function (e) {var newLi = document.createElement('li');newLi.textContent = "数据读取成功!";$$("olStatus").appendChild(newLi)}reader.onloadstart = function (e) {var newLi = document.createElement('li');newLi.textContent = "开始读取数据。。。";$$("olStatus").appendChild(newLi)}reader.onloadend = function (e) {var newLi = document.createElement('li');newLi.textContent = "文件读取成功";$$("olStatus").appendChild(newLi)}reader.onprogress = function (e) {var newLi = document.createElement('li');newLi.textContent = "正在读取数据。。。";$$("olStatus").appendChild(newLi)}}</script>
</head><body><form id="frmTmp" action="#"><fieldset><legend>展示文件读取时触发事件的先后顺序:</legend><input type="file" onchange="showEvent(this.files)" name="feUpload" id="feUpload" /><ol id="olStatus"></ol></fieldset></form>
</body></html>
3.页面效果

4.源码分析

本例中,单击选择文件,触发自定义函数showEvent(),先检测是否浏览器知否支持FileReader对象,

以文本编码的方式读入页面,通过排序列表ul中添加li来看哪个事件先触发,整个排序就是事件触发的顺序。

5.3 使用DataTransfer对象拖放上传图片文件

DataTransfer对象中提供方法,实现浏览器和其他应用程序之间文件的拖动。

1.功能描述

页面表单中,创建一个

  • 元素,用于接收并预览拖入的图片文件。

选择图片文件拖动的方式将文件放入该元素内,并以预览的方式显示。

2.实现代码
3.页面效果
4.代码分析

5.4 文件读取时的错误和异常

文件读取过程中,出现错误和异常,通过FileError对象获取错误与异常。

1.功能描述

出错时,触发onerror事件。

2.错误代码说明
  • NOT_FOUND_ERR 文件无法找到或原文件已被修改
  • SECURITY_ERR 出于安全的考虑,无法获取数据文件
  • ABORT_ERR 触发了abort事件,中止文件读取的过程
  • NOT_READABLE_ERR 由于权限原因,不能获取数据文件
  • ENCODING_ERR 读取文件太大,超出读取时地址的限制

如果案例无法动态显示,直接看笔记

【有道云笔记】《HTML5实战》https://note.youdao.com/s/KjHV02fO

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/53368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分析面试题:客户投保问题分析

目录 0 场景描述 1 数据准备 2 问题分析 2.1 计算小微公司的平均经营时长 2.2 计算小微公司且角色为投保人,保险起期在18年的总保费 2.3 假设,DWD_CUSTOMER_REL客户关联关系表中,存在部分客户保单数很多,部分客户保单数很少的情况,此时DWD_CUSTOMER_BASE表关联,程序…

百度智能云向量数据库创新和应用实践分享

本文整理自第 15 届中国数据库技术大会 DTCC 2024 演讲《百度智能云向量数据库创新和应用实践分享》 在 IT 行业&#xff0c;数据库有超过 70 年的历史了。对于快速发展的 IT 行业来说&#xff0c;一个超过 70 年历史的技术&#xff0c;感觉像恐龙一样&#xff0c;非常稀有和少…

Anaconda Prompt 安装paddle2.6报错

bug描述 python 3.11.9 通过 pip install paddlepaddle2.6.1 安装后&#xff0c;运行 paddle.utils.run_check() 则出现下面的错误&#xff1a; 解决办法 方法一&#xff1a;使用paddle 3的版本 这里要注意我的python版本 方法二&#xff1a;使用低版本的python python3.9…

Lombok jar包引入和用法

大家好&#xff0c;今天分享一个在编写代码时的快捷方法。 当我们在封装实体类时&#xff0c;会使用set、get等一些方法。如下图&#xff0c;不但费事还影响代码的美观。 那么如何才能减少代码的冗余呢&#xff0c;首先lib中导入lombok的jar包并添加库。 此处我已导入&#xf…

Jenkins+Svn+Vue自动化构建部署前端项目(保姆级图文教程)

目录 介绍 准备工作 配置jenkins 构建部署任务 常见问题 介绍 在平常开发前端vue项目时,我们通常需要将vue项目进行打包构建,将打包好的dist目录下的静态文件上传到服务器上,但是这种繁琐的操作是比较浪费时间的,可以使用jenkins进行自动化构建部署前端vue 准备工作 准备…

《粮食科技与经济》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问&#xff1a;《粮食科技与经济》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的第一批认定学术期刊。 问&#xff1a;《粮食科技与经济》级别&#xff1f; 答&#xff1a;省级。主管单位&#xff1a; 湖南省粮食和物资储备局 …

bat批处理实现从特定文件夹中提取文件内容并以父文件夹名存储

1、需求分析 标题是bat批处理实现从特定文件夹中提取文件内容并以父文件夹名存储。这里面我们要做的工作是&#xff1a; ①、批处理脚本使用的是bat文件&#xff1b; ②、文件夹下面有很多子文件夹&#xff0c;然后子文件夹下仍然有相同的文件结构&#xff0c;我们需要从三级…

halcon 自定义距离10的一阶导数幅图,摆脱sobel的3掩码困境

一&#xff0c;为什么要摆脱3的掩码 在处理图像的过程中&#xff0c;会用到平滑算子&#xff0c;很容易破坏边际&#xff0c;所谓的一阶导数sobel只计算掩码为3的差分&#xff0c;在幅度图分割中&#xff0c;往往是很难把握的。 举个例子-现在图像头平滑好了&#xff0c;缺陷…

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用&#xff0c;模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇&#xff0c;同时也伴随着一系列需要克服的挑战&#xff0c;如何看待企业引进增材制造&#xff0c;小编为您全面分析。 机遇篇&#xff1a; 加…

Codeforces Round (Div.3) C.Sort (前缀和的应用)

原题&#xff1a; time limit per test&#xff1a;5 seconds memory limit per test&#xff1a;256 megabytes You are given two strings a and b of length n. Then, you are (forced against your will) to answer q queries. For each query, you are given a range …

FPGA开发:Verilog数字设计基础

EDA技术 EDA指Electronic Design Automation&#xff0c;翻译为&#xff1a;电子设计自动化&#xff0c;最早发源于美国的影像技术&#xff0c;主要应用于集成电路设计、FPGA应用、IC设计制造、PCB设计上面。 而EDA技术就是指以计算机为工具&#xff0c;设计者在EDA软件平台上…

240907-Gradio渲染装饰器Render-Decorator

A. 最终效果 B. 示例代码 import gradio as gr import gradio as grwith gr.Blocks() as demo:input_text gr.Textbox()gr.render(inputsinput_text)def show_split(text):if len(text) 0:gr.Markdown("## No Input Provided")else:# for letter in text:for lett…

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题&#xff0c;就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的&#xff0c;就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream> # include<vector>…

2024/9/6黑马头条跟学笔记(四)

D4内容介绍 阿里三方安全审核 分布式主键 异步调用 feign 熔断降级 1.自媒体文章自动审核 1.1审核流程 查文章——调接口文本审核——minio下载图片图片审核——审核通过保存文章——发布 草稿1&#xff0c;失败2&#xff0c;人工3&#xff0c;发布9 1.2接口获取 注册阿…

How can I load the openai api configuration through js in html?

题意&#xff1a;怎样在HTML中通过JavaScript加载OpenAI API配置 问题背景&#xff1a; I am trying to send a request through js in my html so that openai analyzes it and sends a response, but if in the js I put the following: 我正在尝试通过HTML中的JavaScript发…

Qt/C++ 个人开源项目#串口助手(源码与发布链接)

一、项目概述 该串口助手工具基于Qt/C开发&#xff0c;专为简化串口通信调试与开发而设计&#xff0c;适合新手快速上手。工具具有直观的用户界面和丰富的功能&#xff0c;旨在帮助用户与串口设备建立可靠通信&#xff0c;便于调试、数据传输和分析。 二、主要功能 波特率&a…

【信创建设】信息系统信创建设整体技方案(word原件完整版)

信创&#xff0c;即“信息技术应用创新”。我国自主信息产业聚焦信息技术应用创新&#xff0c;旨在通过对IT硬件、软件等各个环节的重构&#xff0c;基于我国自有IT底层架构和标准&#xff0c;形成自有开放生态&#xff0c;从根本上解决本质安全问题&#xff0c;实现信息技术可…

多款式随身WiFi如何挑选,USB随身WiFi、无线电池随身WiFi、充电宝随身WiFi哪个好?优缺点分析!

市面上的随身WiFi款式多样琳琅满目&#xff0c;最具代表性的就是USB插电款、无线款和充电宝款。今天就来用一篇文章分析一下这三种款式的优缺点。 USB插电款 优点&#xff1a;便宜&#xff0c;无需充电&#xff0c;在有电源的地方可以随时随地插电使用&#xff0c;比如中兴的U…

Spring Boot 部署方案!打包 + Shell 脚本详解

本篇和大家分享的是springboot打包并结合shell脚本命令部署&#xff0c;重点在分享一个shell程序启动工具&#xff0c;希望能便利工作&#xff1b; profiles指定不同环境的配置 maven-assembly-plugin打发布压缩包 分享shenniu_publish.sh程序启动工具 linux上使用shenniu_p…

python进阶篇-day07-高级语法与正则

day07-python其他高级语法 一. with(上下文管理) 介绍 概述 一个类只要实现了__ enter __ () 和 __ exit __ ()方法, 这个类就是一个上下文管理器类, 该类的对象 上下文管理器对象 目的 节约资源, 提高效率, 避免手动释放资源, 且出bug的时候, 也会自动尝试释放资源 特点…