FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。
其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTransfer对象,还可以是来自在一个htmlCanvasElement上执行mozGetAsFile()方法后返回结果。
这里我就以 input 和 DataTransfer 两个方式来讲解 FileReader 对象的使用~~~
<input id="input" type="file">
输出:
点击按钮上传一个文件后,在控制台打印 input.files ,如下:
由上结果可知在 input 元素选择文件后返回了一个 FileList 对象:
这里演示一下weblitRelativePath:
<input id="input" type="file" webkitdirectory>
点击按钮会有一个弹窗提示:
点击上传就会上传我的“简历”文件夹下所有文件,这时我们再在控制台打印 input.files,得到如下结果:
可以看出weblitRelativePath表示文件夹中文件的相对路径。
虽然通过 input:file 的方式可以上传文件,但只能拿到文件的描述信息,并眉头获得文件中的数据,这时就需要 FileReader 出场了
FileReader() 返回一个新构造的FileReader
let fr = new FileReader()
console.log(fr);
控制带打印输出如下:
可以看到 FileReader 对象的原型链上存在许多属性、方法以及对应事件回调。
常量名 | 值 | 描述 |
EMPTY | 0 | 还没有加载任何数据 |
LOADING | 1 | 数据正在被加载 |
DONE | 2 | 已完成全部的读取请求 |
其中FileReader.readAsDataURL(file)和FileReader.readAsText(file,encoding)较为常用
以上列出 FileReader 这些属性、方法以及对应事件,想要具体了解可以查看MDN文档详解
下面直接上手实际例子:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>FileReader</title>
</head>
<body>
<input id="input" type="file">
<script>
// 获取元素
const input = document.querySelector('input[type=file]')
// 监听事件
input.addEventListener('change', ()=>{
// 创建FileReader实例对象
const reader = new FileReader()
// 调用readAsText()方法
reader.readAsText(input.files[0],'utf8') // input.files[0]为第一个文件
// onload:当读取操作成功完成时调用
reader.onload = ()=>{
document.body.innerHTML += reader.result // reader.result为获取结果
}
}, false)
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>FileReader</title>
</head>
<body>
<input id="input" type="file">
<script>
const input = document.querySelector('input[type=file]')
input.addEventListener('change', ()=>{
console.log( input.files ) //上传文件FileList对象
const reader = new FileReader()
//readAsDataURL()方法: 读取文件内容,结果用data:url的字符串形式表示
reader.readAsDataURL(input.files[0]) // input.files[0]为第一个文件
// 读取成功回调
reader.onload = ()=>{
// 创建img节点
const img = new Image()
// 将读取的文件内容结果用data:url的字符串形式表示来赋值给img的src属性
img.src = reader.result// reader.result为获取结果
// 追加节点
document.body.appendChild(img)
}
}, false)
</script>
</body>
</html>
作者:不知名前端李小白,转载请注明原文链接:https://www.cnblogs.com/libo-web/p/15766987.html
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。
首先我们定义一个input标签type=file、然后我们定义一个jsReadFiles的方法将文件作为参数;当上传文件的时候读取这个文件。图片上传成功,只是图片路径变成了base64编码的形式。
HTML5读取文件主要利用的就是FileReader这个API,它的使用需要从一个构造函数开始,保存文件的关键是生成文件对象,可以使用URL.createObjectURL()方法实现,该方法能返回给定对象的URL,用在<a>标签的href属性上就可以创建可下载的文件链接。
在JavaScript文件中存储敏感数据,不仅是一种错误的实践方式,而且还是一种非常危险的行为,长期以来大家都知道这一点。
比如我写了一个JS文件,这个文件需要调用另外一个JS文件,该如何实现呢?这篇文章主要介绍:在js文件中引入另一个js文件的实现
最近有这样一个需求,就是在HTML页面中有个按钮导出,点击它,将构造一个文档并存储到本地文件系统中。另外还有个按钮,点击它,从本地文件系统中读取一个文件并对内容进行分析。
从 Yarn 横空出世推出 lock 文件以来,已经两年多时间了,npm 也在 5.0 版本加入了类似的功能,lock 文件越来越被开发者们接收和认可。本篇文章想从前端视角探讨一下我们为什么需要 lock 文件,以及它的一些成本与风险,当然其中一些观点对于后端也是适用的
什么是断点续传?就是下载文件时,不必重头开始下载,而是从指定的位置继续下载,这样的功能就叫做断点续传。前端通过FileList对象获取到相应的文件,按照指定的分割方式将大文件分段,然后一段一段地传给后端,后端再按顺序一段段将文件进行拼接。
form表单的enctype属性:规定了form表单数据在发送到服务器时候的编码方式.。application/x-www-form-urlencoded:默认编码方式,multipart/form-data:指定传输数据为二进制数据,例如图片、mp3、文件,text/plain:纯文本的传输。空格转换为“+”,但不支持特殊字符编码。
适用场景: 网络绝对路径的URL文件或图片,不存储到本地,转换成stream,直接使用HTTPClient传送到SpringBoot的服务端,将文件存储下来,并返回一个文件地址。目前分层架构的系统越来越多这种需求,所以记录下来以备不时之需。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!