如何用JavaScript实现一个文件上传组件_如何显示进度和处理错误?

JavaScript文件上传组件需用XMLHttpRequest监听upload.onprogress获取进度,FormData封装文件,统一处理onload(200–299成功)、onerror(网络异常)和ontimeout(超时),确保上传过程透明可控。

如何用javascript实现一个文件上传组件_如何显示进度和处理错误?

用 JavaScript 实现一个带进度显示和错误处理的文件上传组件,核心在于利用 XMLHttpRequestfetch + FormData,并监听上传过程中的事件。关键不是“能不能传”,而是“传得明白、出错可知、体验可控”。

用 XMLHttpRequest 监听上传进度

XMLHttpRequest 提供了 upload.onprogress 事件,能实时获取已上传字节数和总大小,适合做进度条。

创建 new XMLHttpRequest(),调用 open('POST', url)绑定 xhr.upload.onprogress = e => { if (e.lengthComputable) { ... } },其中 e.loaded 是已传字节数,e.total 是文件总大小用 Math.round((e.loaded / e.total) * 100) 算百分比,更新 UI(比如 或自定义 div)

用 FormData 构建上传数据

前端选中文件后,用 FormData 包裹,可自动设置 Content-Type: multipart/form-data,服务端也容易解析。

files[0] 获取文件对象const fd = new FormData(); fd.append('file', file);(字段名需和服务端约定一致)可额外加其他字段:fd.append('name', 'xxx');

统一处理成功、失败与网络异常

上传结果不能只靠 onload 判断,要覆盖常见错误路径:

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

xhr.onload状态码为 200–299 视为成功;否则进错误分支xhr.onerror:网络中断、跨域失败、请求被阻止等xhr.ontimeout:手动设 xhr.timeout = 30000,超时后触发服务端返回非 2xx 但有 JSON 错误信息?用 JSON.parse(xhr.responseText) 提取提示(注意 try-catch)

简单封装成可复用函数(示例)

把逻辑收拢,对外暴露清晰接口:

function uploadFile(file, url, onProgress, onSuccess, onError) {  const xhr = new XMLHttpRequest();  const fd = new FormData();  fd.append('file', file);

xhr.upload.onprogress = e => {if (e.lengthComputable) {const percent = Math.round((e.loaded / e.total) * 100);onProgress?.(percent);}};

xhr.onload = () => {if (xhr.status >= 200 && xhr.status < 300) {onSuccess?.(JSON.parse(xhr.responseText));} else {onError?.(new Error(HTTP ${xhr.status}: ${xhr.statusText}));}};

xhr.onerror = () => onError?.(new Error('Network error'));xhr.ontimeout = () => onError?.(new Error('Request timeout'));xhr.timeout = 30000;

xhr.open('POST', url);xhr.send(fd);}

调用时只需传入文件、地址和三个回调,进度、成功、错误各司其职,不耦合 UI。

基本上就这些。不需要第三方库,原生能力足够稳;重点是别漏掉 onerror/ontimeout,不然用户卡在“转圈”却不知为何失败。

以上就是如何用JavaScript实现一个文件上传组件_如何显示进度和处理错误?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1542874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月21日 14:34:28
下一篇 2025年12月9日 11:06:46

相关推荐

  • JavaScript防抖是什么_它如何优化性能?

    防抖是将多次连续调用合并为最后一次执行的技术,用于高频事件如输入、缩放、滚动,通过setTimeout与clearTimeout控制延迟执行,避免资源浪费。 JavaScript防抖(Debounce)是一种限制函数执行频率的技术,核心思想是:**把多次连续的调用合并成最后一次执行**。它特别适合处…

    好文分享 2025年12月21日
    000
  • javascript的模块化是什么_CommonJS和ES6模块有何不同?

    JavaScript模块化将代码拆分为独立可复用单元,解决全局污染、命名冲突与依赖混乱问题;CommonJS运行时加载、值拷贝导出、Node原生支持;ES6模块编译时静态分析、活绑定导出、浏览器和Node均原生支持。 JavaScript 模块化,就是把代码按功能拆成独立、可复用的单元,每个单元有自…

    2025年12月21日
    000
  • 如何用Javascript操作浏览器历史记录?

    JavaScript 的 history API 通过 pushState()、replaceState() 和 popstate 事件实现无刷新路由;pushState() 添加新记录并更新 URL,replaceState() 替换当前记录,popstate 事件监听前进/后退,需服务端 fal…

    2025年12月21日
    000
  • JavaScript定时器有哪些_setTimeout和setInterval有何不同?

    JavaScript中最常用定时器是setTimeout和setInterval:前者延后执行一次,需clearTimeout取消;后者按间隔重复执行,需clearInterval清除;任务耗时波动大时推荐用setTimeout递归实现稳定间隔。 JavaScript里最常用的定时器就两个:setT…

    2025年12月21日
    000
  • JavaScript中Promise是什么_如何解决回调地狱

    Promise 是 JavaScript 处理异步操作的对象,有 pending、fulfilled、rejected 三种不可逆状态;可封装回调函数实现链式调用与统一错误处理,配合 async/await 使异步代码更简洁。 Promise 是 JavaScript 中用于处理异步操作的对象,它代…

    2025年12月21日
    000
  • 如何掌握javascript原型链_继承机制有哪些关键点?

    JavaScript原型链本质是属性查找路径:先查对象自身,再沿[[Prototype]]向上遍历至null;继承即委托而非复制;函数有prototype属性,实例通过__proto__链接其上;需区分__proto__(非标准)与Object.getPrototypeOf(),并注意constru…

    2025年12月21日
    000
  • javascript究竟是什么_如何开始你的第一个编程项目呢?

    JavaScript是让网页交互动态化的编程语言,运行于浏览器和Node.js,可响应操作、更新内容、通信服务器、控制样式;零基础可从待办清单项目入手,用记事本+浏览器即可实践。 JavaScript 是一种让网页“活起来”的编程语言,它负责处理用户交互、动态更新内容、验证表单、控制动画,甚至能构建…

    2025年12月21日
    000
  • javascript中的调试技巧有哪些_如何使用开发者工具高效排查

    Chrome DevTools 是最常用、功能最全的 JavaScript 调试环境,核心技巧包括断点调试(行断点、条件断点、日志点)、console 进阶用法(table、group、time、assert)、实时监控修改、网络与异步问题排查及 Source Maps 启用。 JavaScript…

    2025年12月21日
    000
  • 如何存储数据_javascript的本地存储方式有哪些?

    JavaScript本地存储有三种:localStorage持久化保存小量字符串数据,sessionStorage仅限当前标签页临时存储,IndexedDB支持大量结构化数据的异步数据库操作。 JavaScript 的本地存储方式主要有三种:localStorage、sessionStorage 和…

    2025年12月21日
    000
  • 什么是变量提升_javascript中如何理解它?

    变量提升指JavaScript引擎在编译阶段将声明“记入”作用域顶部,并非真实移动代码;var声明被提升并初始化为undefined,let/const仅提升不初始化而存在TDZ,函数声明整体提升,函数表达式仅变量名提升。 变量提升(Hoisting)是 JavaScript 中一个容易让人困惑的概…

    2025年12月21日
    000
  • javascript如何操作日期和时间_如何处理时区问题?

    JavaScript Date对象内部只存UTC时间戳,但方法默认按本地时区解析;创建时需用带Z或偏移的ISO字符串,显示时应明确时区并用Intl.DateTimeFormat等可控方式处理,存取数据必须统一用UTC。 JavaScript 的 Date 对象本身不存储时区信息,它内部只保存一个毫秒…

    2025年12月21日
    000
  • javascript如何实现默认属性_ defaultprops怎么用

    defaultProps是React类组件的静态属性,用于为undefined的props提供默认值;函数组件应使用解构赋值默认参数替代,且二者不可混用。 在 JavaScript 中,defaultProps 是 React 类组件(Class Component)中用于定义组件默认 props …

    2025年12月21日
    000
  • JavaScript事件循环是什么_它如何管理任务?

    JavaScript事件循环通过宏任务和微任务队列实现分时调度,每次迭代执行一个宏任务后清空全部微任务,确保Promise回调总比setTimeout早执行。 JavaScript事件循环是JS运行时处理异步操作的核心机制,它让单线程的JS能高效响应用户交互、网络请求和定时任务,而不会被阻塞。关键不…

    2025年12月21日
    000
  • javascript中的性能分析是什么_如何定位并解决性能瓶颈

    JavaScript性能分析的核心是测量而非猜测,需用Chrome DevTools的Performance、Memory、Coverage面板定位Long Task、Detached DOM、未执行代码等问题,并针对性优化DOM操作、事件处理、长任务和内存泄漏。 JavaScript性能分析,就是…

    2025年12月21日
    000
  • javascript如何实现多态_它如何体现

    JavaScript的多态依托动态类型和运行时方法绑定实现,体现为同一接口(如draw方法)支持多种实现,通过鸭子类型、原型继承或高阶函数达成,无需编译期类型约束。 JavaScript 中的多态不是靠类的继承体系强制约束实现的,而是依托动态类型和运行时方法绑定自然体现的——同一个函数调用,根据实际…

    2025年12月21日
    000
  • 前端部署方案_javascript发布流程

    前端发布流程需标准化、自动化:1. 采用Git分支策略(main/develop/release/hotfix)确保代码稳定;2. 通过Webpack/Vite构建,生成带哈希的静态资源并优化体积;3. 利用CI/CD(如GitHub Actions)自动测试、构建、部署至CDN或服务器;4. 发布…

    2025年12月21日
    000
  • javascript如何实现虚拟dom_它的优势是什么

    虚拟 DOM 是用普通 JavaScript 对象描述真实 DOM 的树形结构,通过 createElement 创建节点、render 渲染、diff+patch 更新;其核心价值在于提升开发体验、跨平台能力与可控性能优化,而非绝对高性能。 JavaScript 实现虚拟 DOM 的核心,是用普通…

    2025年12月21日
    000
  • javascript如何实现微任务_它们何时执行

    微任务在当前宏任务结束后、渲染前立即执行,常见类型包括Promise回调、MutationObserver回调和queueMicrotask();每次调用栈清空后,引擎持续执行全部微任务直至队列为空,不被渲染或宏任务打断。 JavaScript 中的微任务(Microtasks)在当前任务执行结束后…

    2025年12月21日
    000
  • JavaScript加密解密_JavaScript数据安全处理

    前端加密主要用于防止明文暴露和简单抓包,不能替代后端安全机制。1. JavaScript常见加密方式包括AES(对称加密,适合大数据)、RSA(非对称加密,用于密钥传输)、Base64(数据转码,非加密)和SHA-256哈希(不可逆,用于摘要签名)。2. 推荐使用Web Crypto API实现加密…

    2025年12月21日
    000
  • JavaScript中如何深拷贝对象_有哪些实现方法

    JavaScript深拷贝核心是创建完全独立的新对象,避免引用共享;常用方法包括JSON.parse(JSON.stringify())(简洁但有类型限制)、structuredClone()(现代标准,支持多类型)、手写递归(可控但复杂)和Lodash的cloneDeep()(全面稳妥)。 Jav…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信