小程序文件上传怎么做?一套可复用的 UniApp 上传+预览 Demo

在 UniApp 里做文件上传并不难,难的是把"用户体验"做完整:上传是否成功、失败了为什么、上传后能不能预览刚才那份文件。本文用一个企业签约页面 demo,完整实现 pdf/doc/docx 上传、状态机提示与 openDocument 真实预览,并补齐多端返回结构差异和失败兜底逻辑,代码可以直接复用到业务项目里。

UniApp 上传文件最佳实践:上传结果提示、失败兜底与文档预览

上传文件后要"看得见状态、点得开文件"

最终效果

  • 支持格式:pdf / doc / docx
  • 上传过程有状态:未上传、上传中、上传成功、上传失败
  • 上传成功后,点击"预览"可打开刚上传文件
  • 不同端返回结构不一致时也能兼容

状态模型设计(核心)

  • 推荐状态机:idle -> uploading -> success/fail
  • 为什么不用多个布尔值硬拼:可读性差、容易出现矛盾状态
  • 实际落地:
    • uploadState:业务状态
    • uploading:按钮禁用控制
    • uploadedFilePath:预览依赖字段

上传实现细节(handleUpload)

  • 上传前提示:uni.showToast + 延迟 1500ms 再打开选择器
  • 选择文件:chooseMessageFile(微信端能力)
  • 关键兼容:
    • 优先从 tempFiles[0] 取 name/path/tempFilePath
    • 兜底用 tempFilePaths[0]
  • 成功策略:
    • 拿到路径才算可预览成功
    • 只拿到文件名但无路径时给明确提示

预览实现细节(handlePreview)

  • 入口判断:未上传或无路径直接提示
  • 真实预览:uni.openDocument({ filePath, showMenu: true })
  • 失败兜底:预览失败时更新状态并 toast 告知

总结

  • 上传功能的关键不只是"能传",而是"状态清晰 + 可预览 + 有兜底"

  • 这套 demo 可直接迁移到签约、资料提交、附件审核等场景

相关推荐
雪芽蓝域zzs11 分钟前
第 1 章:天地图 V4 + Vue3 + TS(UniApp / 若依可用)从零教学
vue.js
用户2986985301415 分钟前
React 中实现 Word 与 Markdown 双向转换的实践记录
javascript·react.js·markdown
OpsEye1 小时前
大模型会话里的手机号、身份证,怎么自动脱敏?
javascript·ai编程
爱喝水的小周1 小时前
实验十 Vue‑Router 王者荣耀战绩查询 APP 开发实践
前端·javascript·vue.js
yexianglunbai1 小时前
Vue 3 全面详解:从核心特性到工程化实践
前端·javascript·vue.js
孟陬2 小时前
JavaScript 反引号(` backtick)和双引号的不完全等价 ≠ 场景
javascript·node.js·bun
专业程序开发源2 小时前
django便利店外卖后台管理系统19650-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
snotJam2 小时前
关于Uniapp的Android自定义基座使用
android·uni-app
谢亮_vipxieliang2 小时前
深入理解 JavaScript 数据类型与类型转换
开发语言·javascript·ecmascript
程序员Sunday12 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday