HTML5 文件操作

news2025/1/15 11:11:25

文章目录

  • HTML5 文件操作
    • file元素
      • 选择单个文件
      • 选择多个文件
      • 美化file元素
    • File对象
      • 获取文件信息
      • 转化单位
    • FileReader对象
      • 读取txt文本
      • 在线预览图片
      • 拖拽文件并读取
      • 拖拽图片并预览
    • Blob对象
      • 创建并下载txt文件
      • 将Canvas下载为一张图片

HTML5 文件操作

file元素

语法

<input type="file" />
<input type="file" multiple />
<input type="file" accept="image/jpeg, image/png"/>

accept属性用于设置文件的过滤类型(MIME类型)。

accept属性取值

在这里插入图片描述

选择单个文件

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <form method="post">
            <input type="file">
        </form>
    </body>
</html>

在这里插入图片描述在这里插入图片描述

选择多个文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
	</head>
	<body>
		<form method="post">
			<input type="file" accept="image/png" multiple>
		</form>
	</body>
</html>

在这里插入图片描述在这里插入图片描述在这里插入图片描述

美化file元素

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }

            .fileContainer {
                width: 160px;
                margin: 30px auto;
            }

            .filePicker {
                position: relative;
                width: 160px;
                height: 44px;
                line-height: 44px;
                text-align: center;
                color: #ffffff;
                background: #00b7ee;
            }

            .filePicker input[type="file"] {
                position: absolute;
                top: 0;
                left: 0;
                width: 160px;
                height: 44px;
                opacity: 0;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <div class="fileContainer">
            <div class="filePicker">
                <label>点击选择文件</label>
                <input id="fileInput" type="file" accept=" image/*" />
            </div>
        </div>
    </body>
</html>

在这里插入图片描述

分析

首先使用opacity: 0;将表单设置为透明,然后使用绝对定位在表单原来的位置上面定义一个label就可以了。

File对象

在文件上传元素中,将会产生一个FileList对象,它是一个类数组对象,表示所有文件的集合。其中,每一个文件就是一个File对象。

想要获取某一个文件对象(即File对象),我们首先需要获取FileList对象,然后再通过数组下标形式来获取。

File对象有以下4个属性

属性说明
name文件名
type文件类型
size文件大小,单位为B
lastModifiedDate文件最后修改修改

获取文件信息

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var oFile = document.getElementById("fileInput");
				oFile.onchange = function() {
					var file = oFile.files[0];
					console.log("图片名为:" + file.name);
					console.log("图片大小为:" + file.size + "B");
					console.log("图片类型为:" + file.type);
					console.log("最后修改时间为:" + file.lastModifiedDate);
				}
			}
		</script>
	</head>
	<body>
		<input id="fileInput" type="file" accept=" image/*" />
	</body>
</html>

在这里插入图片描述

转化单位

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var unitArr = ["KB", "MB", "GB", "TB"];
				var oFile = document.getElementById("fileInput");
				var oOutput = document.getElementById("output");
				oFile.onchange = function() {
					var file = oFile.files[0];
					var size = file.size;
					var fileSizeStr = size + "B";
					//B转为KB
					size = size / 1024;
					//转化单位
					for (var i = 0; size > 1; i++) {
                        //size.toFixed(2)表示将size值四舍五入,只取两位小数
						fileSizeStr = size.toFixed(2) + unitArr[i];
						size /= 1024;
					}
					oOutput.innerText = fileSizeStr;
				}
			}
		</script>
	</head>
	<body>
		<input id="fileInput" type="file" /><br>
		<output id="output"></output><br>
	</body>
</html>

在这里插入图片描述在这里插入图片描述

FileReader对象

在HTML5中,专门提供了一个文件操作的API,即FileReader对象。我们通过FileReader对象可以很方便地读取文件中的数据。

FileReader对象有5个方法,其中4个用来读取文件数据,另外1个用于中断读取操作.

FileReader方法

方法说明
readAsText()将文件读取为文本
readAsDataURL()将文件读取为DataURL格式的base64字符串
readAsBinaryString()将文件读取为二进制编码
readAsArrayBuffer()将文件读取为一个ArrayBuffer对象
abort()中止读取操作

readAsText()方法有两个参数:第1个参数为File对象,第2个参数为文本的编码方式,默认值为“utf-8”。这个方法非常容易理解,表示将文件以文本方式读取,读取的结果就是这个文本文件的内容。

readAsBinaryString()方法将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串来存储文件。

abort()方法可以用来中止读取操作,在读取大文件时,这个方法非常有用。

FileReader对象的事件

事件说明
onloadstart开始读取
onprogress正在读取
onload读取成功。如果读取成功,则this.result的值就文件的内容;否则this.result的值为null。
onloadend读取完成(成功、失败或取消)
onabort中断
onerror读取出错

读取txt文本

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var oFile = document.getElementById("fileInput");
				var oOutput = document.getElementById("output");
				oFile.onchange = function() {
					var file = oFile.files[0];
					var fileReader = new FileReader();
					fileReader.readAsText(file, "utf-8");
					fileReader.onload = function() {
						oOutput.innerText = this.result;
					}
				}
			}
		</script>
	</head>
	<body>
		<input id="fileInput" type="file" /><br>
		<output id="output"></output>
	</body>
</html>

在这里插入图片描述

在线预览图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var oFile = document.getElementById("file");
				var oOutput = document.getElementById("output");
				oFile.onchange = function() {
					var file = oFile.files[0];
					var fileReader = new FileReader();
					fileReader.readAsDataURL(file); //图片转base64
					fileReader.onload = function() {
						var oImg = document.createElement("img");
						oImg.src = this.result;
						console.log(this.result);
						oOutput.appendChild(oImg);
					}
				}
			}
		</script>
	</head>
	<body>
		<input id="file" type="file" /><br>
		<output id="output"></output>
	</body>
</html>

在这里插入图片描述

拖拽文件并读取

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			#box {
				width: 150px;
				height: 150px;
				border: 1px solid red;
			}
		</style>
		<script>
			window.onload = function() {
				var oBox = document.getElementById("box");
				var oOutput = document.getElementById("output");
				//阻止默认行为
				oBox.ondragover = function(e) {
					e.preventDefault();
				}
				//添加ondrop事件
				oBox.ondrop = function(e) {
					e.preventDefault();
					var file = e.dataTransfer.files[0];
					var reader = new FileReader();
					reader.readAsText(file, "utf-8");
					reader.onload = function() {
						oOutput.innerText = this.result;
					}
				}
			}
		</script>
	</head>
	<body>
		<div id="box"></div>
		<output id="output"></output>
	</body>
</html>

在这里插入图片描述

拖拽图片并预览

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style>
			#box {
				width: 150px;
				height: 150px;
				border: 1px solid red;
			}
		</style>
		<script>
			window.onload = function() {
				var oBox = document.getElementById("box");
				var oOutput = document.getElementById("output");
				//阻止默认行为
				oBox.ondragover = function(e) {
					e.preventDefault();
				}
				//添加ondrop事件
				oBox.ondrop = function(e) {
					e.preventDefault();
					var file = e.dataTransfer.files[0];
					var reader = new FileReader();
					reader.readAsDataURL(file);
					reader.onload = function() {
						var oImg = document.createElement("img");
						oImg.src = this.result;
						oImg.style.width = "150px";
						oImg.style.height = "150px";
						oOutput.appendChild(oImg);
					}
				}
			}
		</script>
	</head>
	<body>
		<div id="box"></div>
		<output id="output"></output>
	</body>
</html>

在这里插入图片描述

Blob对象

在HTML5中,还新增了一个Blob对象,用于代表原始二进制数据。前面介绍的File对象也继承于Blob对象。

语法

var blob = new Blob(dataArray, type);

说明

dataArray参数:这是一个数组,可以是String对象(即字符串)、Blob对象(即其他Blob对象)、ArrayBuffer对象、ArrayBufferView对象。

type参数:是一个字符串,表示Blob对象的MIME类型。

创建并下载txt文件

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var oTxt = document.getElementById("txt");
				var oBtn = document.getElementById("btn");
				var oContainer = document.getElementById("container");
				oBtn.onclick = function() {
					var text = oTxt.value;
					if (text == "") {
						return;
					}
					var blob = new Blob([text], {
						type: "text/plain"
					});
					var oA = document.createElement("a");
					var url = window.URL.createObjectURL(blob);
					oA.href = url;
					oA.download = "新文件";
					oA.innerText = "下载文件";
					oContainer.appendChild(oA)
				}
			}
		</script>
	</head>
	<body>
		<textarea id="txt" cols="30" rows="10"></textarea>
		<input id="btn" type="button" value="创建链接">
		<div id="container"></div>
	</body>
</html>

在这里插入图片描述

将Canvas下载为一张图片

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script>
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var btn = document.getElementById("btn");
				var context = canvas.getContext("2d");
				var text = "hello world";
				context.font = "bold 60px 微软雅黑";
				context.shadowOffsetX = 5;
				context.shadowOffsetY = 5;
				context.shadowColor = "#66ccff";
				context.shadowBlur = 10;
				context.fillStyle = "#ff6699";
				context.fillText(text, 10, 90);
				btn.onclick = function() {
					canvas.toBlob(function(blob) {
						var oA = document.createElement("a");
						var url = window.URL.createObjectURL(blob);
						oA.download = "hello";
						oA.href = url;
						document.body.appendChild(oA);
						oA.click();
						document.body.removeChild(oA);
					}, "image/png", 1);
				}
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="380" height="150" style="border:1px solid silver;"></canvas>
		<input id="btn" type="button" value="下载图片">
	</body>
</html>

在这里插入图片描述

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

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

相关文章

SpringIOC流程以及Mybatis架构

1、Spring IOC 流程图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/626a8582f4b14ac3983567a85bce1d4d.png IOC 依赖注入整体流程 1、环境初始化 2、Bean工厂初始化 3、读取项目配置 4、定义解析Bean-->BeanDefintion 5、将BeanDefinition存储工厂类的Map 6、通过…

Golang 将视频按照时间维度剪切 | Golang工具

目录 前言 环境依赖 代码 总结 前言 本文提供将视频按照时间维度进行剪切的工具方法&#xff0c;一如既往的实用主义。 主要也是学习一下golang使用ffmpeg工具的方式。 环境依赖 ffmpeg环境安装&#xff0c;可以参考我的另一篇文章&#xff1a;windows ffmpeg安装部署_阿…

2022 IoTDB Summit:IoTDB PMC 乔嘉林《端边云协同:Apache IoTDB 全新单机分布式架构》...

12 月 3 日、4日&#xff0c;2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本&#xff0c;并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例&#xff0c;深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

具有循环条件gan的实值(医疗)时间序列生成-2017

REAL-VALUED (MEDICAL) TIME SERIES GENERATION WITH RECURRENT CONDITIONAL GANS ABSTRACT 生成对抗网络(GANs)作为一种训练模型以产生逼真数据的框架已经取得了显著的成功。在这项工作中&#xff0c;我们提出了循环GAN (RGAN)和循环条件GAN (RCGAN)来生成真实的实值多维时间…

canal实战问题汇总分析

canal在实战过程经常会遇到这样或者那样的问题&#xff0c;今天我们专门用一篇文章来列举分析一下&#xff0c;比如、JDK版meta.dat 中保存的位点信息和数据库的位点信息不一致本不匹配、bin-log信息消费失败等问题&#xff0c;下面我们开始一一分析&#xff1a; 1、数据库数据…

数据可视化软件有哪些?

随着大数据概念的普及与业务数据的爆炸式增长&#xff0c;越来越多的企业已经不满足于Excel的常规操作。 因为相较于以往PPT/Word/Excel数据汇报的形式而言&#xff0c;数据可视化平台包含了丰富的图表、组件信息&#xff0c;仅用一张屏幕就能够囊括诸多讯息&#xff0c;画面色…

2022全年度休闲食品(零食)十大热门品牌销量榜单

随着经济的发展及人们消费水平的提高&#xff0c;休闲食品作为居家出游的快消品&#xff0c;逐渐成为了人们生活中必不可少的一部分&#xff0c;同时&#xff0c;消费者对于休闲食品的数量和品质的需求也正不断增长。并且&#xff0c;在休闲食品的消费群体中&#xff0c;年轻群…

Eclipse插件之Tomcat Plugin 介绍、安装与使用

Tomcat Plugin 介绍 Eclipse Tomcat 插件为开发Java Web应用程序提供了Tomcat容器的简单集成。所谓的集成其实主要是以下功能&#xff1a; 在Eclispe中启动和关闭Tomcat启动后的应用可以很容易的打断点进行调试&#xff0c; 这一点应该是该插件最大的优势。 Tomcat 插件是Ec…

MySQL性能优化一 底层数据结构与算法

一 索引 索引 MySQL官网解释&#xff1a;索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构&#xff1a; 二叉树红黑树Hash表B-Tree 案例&#xff1a;有一张两列七行的一个表t 假如我们的查找sql语句是&#xff1a; select * from t where t.col289;正常情况下…

Mysql process 问题,kill不用的process

这个一般会出现在连接池中&#xff0c;导致连接池数量不够然后连接失败&#xff0c;所以要kill 我们kill的都是sleep的&#xff0c;就是没有释放但是不用的链接 前言 sql中的show full processlist是查看线程&#xff0c;实际就是查这个表 select * from information_schema.…

16S全长测序解密转基因玉米根瘤菌群落组成

论文题目&#xff1a; Deciphering the rhizobacterial assemblages under the influence of genetically engineered maize carrying mcry genes 期刊&#xff1a; Environmental Science and Pollution Research 研究背景 玉米是我国的重要粮食作物&#xff0c;但虫害和草…

2023大厂招聘岗位数预测!明年哪些公司可以去?

winter is coming&#xff01;这一年C端要见顶、K12被团灭、阿里被监管&#xff0c;滴滴被处罚、华为都在力求在寒气中活下来&#xff0c;连大厂都深陷泥沼&#xff0c;更别说中小企业。 太多因素导致大批裁员&#xff0c;前不久&#xff0c;互联网er最后的梦乡虾皮大量裁员&am…

智能车|直流电机、编码器与驱动器

智能车|直流电机、编码器与驱动器直流电机直流电机原理减速器编码器编码器简介编码器的工作原理四倍频采集编码器采集程序实现驱动器TB6612FNG 电机驱动器TB6612FNG 的主要参数引脚说明电机整体接线直流电机 直流电机&#xff08;direct current machine&#xff09;是指能将直…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK18特性讲解】

JDK各个版本特性讲解-JDK18特性 一、JAVA18概述 Java 18 在 2022 年 3 月 22 日正式发布&#xff0c;Java 18 不是一个长期支持版本&#xff0c;这次更新共带来 9 个新功能。 https://openjdk.org/projects/jdk/18/ 二、具体新特性 1. 默认UTF-8字符编码 JDK 一直都是支持 UT…

SAP ABAP——SAP简介(四)【SAP GUI】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

Docker学习笔记——收藏

Docker 命令&#xff1b;Docker进程相关命令&#xff1b;Docker 镜像相关命令&#xff1b;Docker 容器数据卷&#xff1b;Docker 应用部署案例&#xff1b;Dockerfile&#xff1b;Docker 私有仓库搭建&#xff1b;笔记 目录 初始Docker 安装Docker Docker 架构 Docker 命令 …

圣诞也要撸代码 |【消息中间件MQ系列】Spring整合kafka并设置多套kafka配置

1、前言 圣诞节的到来&#xff0c;程序员不会收到圣诞老人的&#x1f381;&#xff0c;但可以自己满足一下自己&#xff0c;所以&#xff0c;趁着有时间&#xff0c;就记录一下这会儿撸了些什么代码吧&#xff01;&#xff01;&#xff01; 因为业务原因&#xff0c;需要在系统…

事务日志undo log

事务日志undo log 1 Undo日志的作用 作用1&#xff1a;回滚数据 逻辑上恢复&#xff0c;之前插入了一条数据&#xff0c;已经开辟了物理空间&#xff0c;回滚只是将该数据删除&#xff0c;物理空间还存在。 作用2&#xff1a;MVCC 2 Undo存储结构 mysql> show variables …

java生成SSL证书并添加信任,tomcat配置https访问并解决扫描漏洞问题

一、java生成keystore密钥对 1、打开jdk的bin目录&#xff0c;使用keytool工具生成keystore密钥对 Keytool 是一个 Java 数据证书的管理工具 &#xff0c;Keytool 将密钥&#xff08;key&#xff09;和证书&#xff08;certificates&#xff09;存储于一个称为 keystore 的密…

某车企用户数据泄露,新能源汽车信息安全问题不容忽视

某车企&#xff1a;公司核心数据被窃取 12月20日&#xff0c;国内某新能源汽车发布相关声明称&#xff0c;2022年12月11日&#xff0c;其收到外部邮件&#xff0c;声称拥有该车企内部数据&#xff0c;并以泄露数据勒索225万美元等额比特币&#xff08;约合1570.5万元人民币&am…