0

0

JavaScript如何实现文件上传和读取?

夜晨

夜晨

发布时间:2025-12-16 11:30:08

|

693人浏览过

|

来源于php中文网

原创

javascript文件上传与读取分两步:先用filereader预览用户选择的文件,再用formdata上传。关键限制是js无法直接访问磁盘,必须通过input[type="file"]由用户触发选择,且需处理进度、错误及安全校验。

javascript如何实现文件上传和读取?

JavaScript 实现文件上传和读取主要分两步:前端获取并预览文件(用 FileReader),再通过 FormData 发送到后端。关键在于理解浏览器对本地文件的访问限制——JS 不能直接读磁盘,只能处理用户主动选择的文件对象。

用 input[type="file"] 获取文件

这是起点,必须由用户触发选择操作,不能自动调用 click()(部分浏览器会拦截):

  • HTML 中写:<input type="file" id="fileInput">
  • JS 监听 change 事件:fileInput.addEventListener('change', handleFile)
  • event.target.filesFileList 对象,可转为数组遍历:Array.from(event.target.files)

用 FileReader 读取文件内容(不上传)

适合预览文本、JSON、图片等小文件,注意它只在浏览器内存中处理,不发请求:

  • 创建实例:const reader = new FileReader()
  • 监听加载完成:reader.onload = () => console.log(reader.result)
  • 常用读取方法:reader.readAsText(file)(文本)、reader.readAsDataURL(file)(Base64 图片)、reader.readAsArrayBuffer(file)(二进制)
  • 读取大文件时建议用 readAsArrayBuffer 配合 Blob.slice() 分块处理,避免内存溢出

用 FormData 上传文件到服务器

这是实际提交文件的标准方式,兼容性好,支持多文件和额外字段:

站长俱乐部购物系统
站长俱乐部购物系统

功能介绍:1、模块化的程序设计,使得前台页面设计与程序设计几乎完全分离。在前台页面采用过程调用方法。在修改页面设计时只需要在相应位置调用设计好的过程就可以了。另外,这些过程还提供了不同的调用参数,以实现不同的效果;2、阅读等级功能,可以加密产品,进行收费管理;3、可以完全可视化编辑文章内容,所见即所得;4、无组件上传文件,服务器无需安装任何上传组件,无需支持FSO,即可上传文件。可限制文件上传的类

下载

立即学习Java免费学习笔记(深入)”;

  • 新建表单数据:const formData = new FormData()
  • 添加文件:formData.append('file', file)(单个)或 formData.append('files', file, 'custom-name.jpg')(带自定义名)
  • 添加其他字段:formData.append('desc', '用户头像')
  • 发送请求:fetch('/upload', { method: 'POST', body: formData })(注意:不要设 Content-Type,浏览器会自动设置带 boundary)

上传进度与错误处理

提升用户体验的关键细节:

  • 监听上传进度:fetch 本身不支持进度,改用 XMLHttpRequest 或封装 fetch + ReadableStream(较新)
  • 简单方案:const xhr = new XMLHttpRequest(); xhr.upload.onprogress = e => { console.log((e.loaded / e.total * 100).toFixed(1) + '%') }
  • 错误统一捕获:xhr.onerrorxhr.onload 判断 xhr.status,同时检查 file.size === 0 或类型是否符合要求(如 file.type.startsWith('image/')

基本上就这些。核心是理清“选文件 → 读内容(可选)→ 构造数据 → 发请求”的链路,不复杂但容易忽略安全校验和用户体验细节。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

453

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

558

2023.09.20

append用法
append用法

append是一个常用的命令行工具,用于将一个文件的内容追加到另一个文件的末尾。想了解更多append用法相关内容,可以阅读本专题下面的文章。

348

2023.10.25

python中append的用法
python中append的用法

在Python中,append()是列表对象的一个方法,用于向列表末尾添加一个元素。想了解更多append的更多内容,可以阅读本专题下面的文章。

1080

2023.11.14

python中append的含义
python中append的含义

本专题整合了python中append的相关内容,阅读专题下面的文章了解更多详细内容。

184

2025.09.12

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号