新闻中心

J*aScript如何实现文件上传和读取?

2025-12-16
浏览次数:
返回列表
J*aScript文件上传与读取分两步:先用FileReader预览用户选择的文件,再用FormData上传。关键限制是JS无法直接访问磁盘,必须通过input[type="file"]由用户触发选择,且需处理进度、错误及安全校验。

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

J*aScript 实现文件上传和读取主要分两步:前端获取并预览文件(用 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,即可上传文件。可限制文件上传的类

站长俱乐部购物系统 0 查看详情 站长俱乐部购物系统

立即学习“J*a免费学习笔记(深入)”;

  • 新建表单数据: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/')

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

以上就是J*aScript如何实现文件上传和读取?的详细内容,更多请关注其它相关文章!


# 有哪些  # 巩义网站推广优化找哪家  # 正规的网站优化电话  # 品牌网站推广大概费用高吗  # 盐城企业建设网站公司  # 北流网站营销推广  # 崇左一对一网站建设优化  # 内江网站建设性价比高  # 课程推广营销活动有哪些  # 朗霞营销推广  # 2b产品推广营销  # 如何使用  # 上传文件  # 第一个  # 如何实现  # javascript  # 这是  # 购物系统  # 上传  # 文件上传  # stream  # 后端  # app  # 浏览器  # json  # 前端  # js  # html  # java 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: Go RPC HTTP服务正确实现与常见陷阱解析  C++ typeid如何获取类型信息_C++ RTTI运行时类型识别用法  Golang如何测试channel通信行为_Golang channel通信测试与分析方法  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  AO3官方可用镜像 Archive of Our Own网页版最新入口  纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  Python中如何避免重复条件判断:利用数据结构实现动态逻辑  腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址  C++如何解决segmentation fault_C++段错误调试与原因分析  飞书妙记怎样用语音转文字速记_飞书妙记用语音转文字速记【速记方法】  J*a最大堆Heapify方法修复:索引计算与边界条件深度解析  iwriter统一登录平台 iwrite账号密码登录页面  韩剧圈正版入口页面_韩剧圈官网登录链接  Log4j Console Appender性能瓶颈与高并发优化策略  如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】  BetterDiscord插件中安全更新用户简介的实践指南  Lar*el的路由模型绑定怎么用_Lar*el Route Model Binding简化控制器逻辑  AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南  黑猫投诉统一入口官网 消费者权益保护投诉平台  J*a递归快速排序中静态变量导致数据累积问题的解决方案  《刺客信条:影》PS5 Pro和Switch 2画面对比  铁路12306的积分有效期是多久_铁路12306积分有效期说明  HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全  Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南  AO3同人作品网入口 AO3搜索引擎官网永久地址  J*aScript中赋值与自增运算符的复杂交互与执行机制  向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程  解决Bootstrap卡片顶部边距导致背景图下移的问题  c++ dfs和bfs代码 c++深度广度优先搜索算法  淘宝支付提示失败如何解决 淘宝支付流程优化方法  PrimeNG Sidebar背景色自定义指南:CSS覆盖与主题化实践  如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!  J*a应用程序首次运行自动创建文件与目录的最佳实践  如何在J*a中使用Locale处理多语言环境  React列表渲染与独立状态管理:避免全局状态影响局部更新  提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案  FullCalendar 自定义按钮样式定制指南  J*a里如何使用N*igableMap进行导航操作_可导航Map操作技巧解析  解决Flask中Quill编辑器内容提交失败及TypeError的指南  在FastAPI中利用lifespan与依赖注入高效管理Redis连接池  mcjs网页版流畅运行 mcjs低配电脑畅玩入口  Go语言JSON解析深度指南:动态访问与结构体映射实践  抖音创作助手登录入口_抖音创作辅助工具官网直达  Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】  蛙漫移动版在线看 蛙漫手机浏览器直达入口  Win10自动更新怎么关闭 Win10永久关闭系统更新的两种方法【终极版】  响应式图片在网页设计中的正确实现方法  qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程 

搜索