讲师中心 微信公众号

工具推荐

视频效率加速
立刻MV
立刻MV

低成本歌曲 MV、视频生成

updream

一键生成高质量推广成片

剧云
剧云

中文短剧剧本制作平台

Seko
Seko

AI短剧一键生成成片

JavaScript如何实现文件上传_怎样处理大文件和进度显示

阿晨姑娘_2621

阿晨姑娘_2621

发布时间:2025-12-27 19:29:16

|

404人浏览过

|

来源于php中文网

原创

JavaScript文件上传核心用FormData+XMLHttpRequest或fetch;进度显示依赖xhr.upload.onprogress;大文件需分片上传+断点续传;辅以类型大小校验、按钮禁用、失败重试及本地预览等体验优化。

javascript如何实现文件上传_怎样处理大文件和进度显示

JavaScript 实现文件上传,核心是利用 XMLHttpRequest 或更现代的 fetch 配合 FormData;处理大文件和进度显示,则依赖 XMLHttpRequest.upload.onprogress(fetch 目前不支持原生上传进度),并常需分片上传来提升稳定性与可控性。

基础文件上传:用 FormData + XMLHttpRequest

这是最通用、兼容性好的方式,适合中小文件(如几 MB 以内):

  • 创建 FormData 实例,把 <input type="file"> 的 files[0] 追加进去
  • 新建 XMLHttpRequest,设置请求方法(POST)、URL,并监听 load 和 error
  • 调用 xhr.send(form) 即可发送

服务端收到的是标准 multipart 表单数据,无需额外解析库(如 Express 中可用 multer)。

显示上传进度:必须用 XMLHttpRequest.upload

fetch 暂不提供上传过程的进度事件,所以要实时显示进度条,得用 XMLHttpRequest 并监听其 upload.onprogress:

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

HISUI 前端框架开发指南(IRIS版)
HISUI 前端框架开发指南(IRIS版)

HISUI 前端框架基础开发指南。HISUI 是基于 easyui 二次开发的 jQuery UI 组件库,专为医疗信息系统设计。当涉及 HISUI 组件开发、jQuery easyui 表格/表单/布局/窗口、医疗系统前端页面编写时使用此 skill。 涵盖 40 个组件的官方文档参考,支持声明式与编程式两种初始化方式,提供 $cm/$m 数据访问方法。

下载
  • 在 xhr.upload.onprogress = e => { ... } 中获取 e.loaded(已传字节数)和 e.total(总字节数)
  • 计算百分比:Math.round((e.loaded / e.total) * 100),更新 UI 元素(如 <progress></progress> 或自定义 div)
  • 注意:当文件本地读取或网络限速时,e.total 可能为 0(如某些浏览器对 Blob 上传未设 total),建议加空值判断

上传大文件(100MB+):分片上传 + 断点续传

直接传大文件容易失败、无法暂停、占用内存高。推荐分片上传(chunked upload):

  • 前端用 File.prototype.slice() 将文件切分为固定大小块(如 5MB/片)
  • 每片单独发请求,携带标识(如文件唯一 hash、分片序号、总片数),后端按序合并或暂存
  • 上传前先向服务端查询已传哪些片(“秒传”和断点续传的基础),跳过已成功上传的片
  • 所有片上传完成后,发一个“合并”请求,服务端拼接并生成最终文件

可配合 Web Worker 处理切片和 hash 计算,避免阻塞主线程;使用 AbortController 支持手动取消。

增强体验的小技巧

让上传更健壮、用户更安心:

  • 上传前校验文件类型、大小(file.size > MAX_SIZE),提前提示而非等后端返回 413
  • 禁用上传按钮 + 显示 loading 状态,防止重复提交
  • 上传失败时保留进度,支持重试(尤其分片场景下只重传失败片)
  • 使用 URL.createObjectURL(file) 快速预览图片/视频,无需上传即可确认内容

不复杂但容易忽略。

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

781

2026.02.10

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1069

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

3420

2023.10.25

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

4758

2023.08.10

go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

2112

2025.09.03

点击input框没有光标怎么办
点击input框没有光标怎么办

点击input框没有光标的解决办法:1、确认输入框焦点;2、清除浏览器缓存;3、更新浏览器;4、使用JavaScript;5、检查硬件设备;6、检查输入框属性;7、调试JavaScript代码;8、检查页面其他元素;9、考虑浏览器兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

954

2023.11.24

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

60

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

20

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

40

2026.11.06

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.5万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn