跳到主要内容位置

File API:读取和上传本地文件

File API 是 JavaScript 中一个非常有用的功能,它可以让我们通过 JavaScript 操作本地文件。本文将介绍如何使用 File API 读取和上传本地文件,包括 File、FileList、FileReader、FormData 等对象和方法。

读取本地文件

要读取本地文件,我们需要使用 <input type="file"> 元素来创建一个文件选择器,然后监听 change 事件,在事件处理函数中获取选择的文件。下面是一个示例:

<input type="file" id="file-input">

<script>
const fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
const reader = new FileReader();
reader.readAsText(file);
reader.addEventListener('load', () => {
console.log(reader.result);
});
});
</script>

在这个示例中,我们首先创建了一个 <input type="file"> 元素,并给它一个 id。然后,我们使用 document.getElementById() 方法获取这个元素,并监听它的 change 事件。在事件处理函数中,我们首先获取选择的文件,然后创建一个 FileReader 对象,并调用它的 readAsText() 方法来读取文件内容。readAsText() 方法会异步地读取文件,并在读取完成后触发 load 事件。我们可以在 load 事件处理函数中获取文件内容,它保存在 FileReader 对象的 result 属性中。

除了 readAsText() 方法,FileReader 还提供了其他方法,如 readAsDataURL()readAsArrayBuffer() 等等,可以根据需要选择不同的方法来读取文件内容。

上传本地文件

在 Web 应用程序中,我们通常需要上传本地文件到服务器。要实现这个功能,我们需要使用 <input type="file> 元素创建一个文件选择器,然后监听 change 事件,在事件处理函数中获取选择的文件,并将它上传到服务器。

下面是一个简单的示例,展示如何上传本地文件:

<form id="upload-form">
<input type="file" id="file-input">
<button type="submit">上传文件</button>
</form>

<script>
const uploadForm = document.getElementById('upload-form');
const fileInput = document.getElementById('file-input');
uploadForm.addEventListener('submit', (event) => {
event.preventDefault();
const file = fileInput.files[0];
const formData = new FormData();
formData.append('file', file);
fetch('/upload', {
method: 'POST',
body: formData
})
.then(response => response.text())
.then(data => {
console.log(data);
})
.catch(error => {
console.error(error);
});
});
</script>

在这个示例中,我们首先创建了一个表单,并在表单中添加了一个文件选择器和一个提交按钮。然后,我们使用 document.getElementById() 方法获取表单和文件选择器,并监听表单的 submit 事件。在事件处理函数中,我们首先调用 preventDefault() 方法阻止表单默认的提交行为,然后获取选择的文件,创建一个 FormData 对象,并将文件添加到 FormData 对象中。最后,我们使用 fetch() 方法将 FormData 对象上传到服务器,并在上传完成后处理服务器的响应。

需要注意的是,上传文件时需要使用 POST 请求,并将 FormData 对象作为请求体发送到服务器。服务器端需要相应的处理程序来接收上传的文件,并将其保存到服务器上。

除了上述示例中使用的 fetch() 方法,还可以使用 XMLHttpRequest 对象来上传文件。具体实现方式可以参考 MDN 文档中的示例。

总结

总结一下,File API 是 JavaScript 中一个非常有用的功能,它可以让我们通过 JavaScript 操作本地文件。我们可以使用 File、FileList、FileReader、FormData 等对象和方法来读取和上传本地文件,从而实现一些有趣的功能,例如:图片预览、文件上传、文件下载等。

提示

一系列的课程让你成为高级前端工程师。课程覆盖工作中所有常用的知识点和背后的使用逻辑,示例全部都为工作项目简化而来,学完即可直接上手开发!

即使你已经是高级前端工程师,在课程里也可能会发现新的知识点和技巧,让你的工作更加轻松!

《React 完全指南》课程,包含 React、React Router 和 Redux 详细介绍,所有示例改编自真实工作代码。点击查看详情。

《Vue 3.x 全家桶完全指南与实战》课程,包括 Vue 3.x、TypeScript、Vue Router 4.x、Vuex 4.x 所有初级到高级的语法特性详解,让你完全胜任 Vue 前端开发的工作。点击查看详情。

《React即时通信UI实战》课程,利用 Storybook、Styled-components、React-Spring 打造属于自己的组件库。

《JavaScript 基础语法详解》本人所著图书,包含 JavaScript 全面的语法知识和新特性, 可在京东、当当、淘宝等各大电商购买