返回知识库

界面与交互 · 操作与输入

上传Upload

选择、校验并传输本地文件,把每一步状态都落在文件行上:限制、进度、成功、失败原因和可移除。

把一个文件从选择送到删除

上传不是「选完就完事」。在下面队列里加入模拟文件,看校验、进度、成功、失败、重试和移除怎样分别落在文件行上——遮住底部说明,行本身仍能讲清状态。

你在给团队后台换头像。真实页面里点击下面区域会弹出系统文件选择框;这里用三个模拟文件, 方便你观察 选择 → 校验 → 上传 → 成功 / 失败 → 移除 的完整状态。所有限制、进度和结果 都长在文件行上,不只靠底部说明。

点击或把文件拖到这块区域限 JPG / PNG · 单个 ≤ 2 MB · 真实页面弹文件选择框

队列为空。点上面的模拟文件加入一个,看它的状态怎么变。

原因:上传从选择文件开始。真实页面里点击下面的区域会弹出系统文件选择框;这里用三个模拟文件,方便观察完整状态。下一步:点一个模拟文件加入队列:JPG 通过校验,PNG 超大,PDF 格式不支持。对照:校验失败的文件会停在队列里标出原因,不进入传输;通过的才点亮「开始上传」。

面板里刚走过的五件事

上面队列反复出现的五件事,命名一下。

  • 限制写在操作之前:格式、大小、数量在投放区就标清,别等用户选完才告诉他不行。
  • 本地先校验:格式或大小不通过的文件停在队列里标原因,不进入传输。
  • 进度可见、禁用重复提交:上传中每一行有墨色进度条,主按钮禁用,防止用户连点。
  • 失败说原因 + 可重试:网络失败写明「网络错误」并给「重试」,不只弹「出错了」。
  • 成功后可预览 / 移除:上传完成行变「已上传」,能预览或清出队列。

什么时候用它

看到「要把本地文件交给服务端」这条信号时用;只是给链接或粘贴文本时不必套上传。

适合

换头像、传附件、提交封面图——单个或少量、可在浏览器里完成校验和传输的文件。

先别单独用

只需贴个链接、纯文本粘贴,或单个文件极大(数百 MB 以上)要走分片 / 断点续传时,改用专用方案。

怎么用对,避开三个坑

从选择到获得判断的最短路径,并保留可恢复的状态。

  • 用原生 <input type="file" accept> 触发选择,把限制同时写在投放区文案和 accept 上,别只靠其一。
  • 选择后在客户端先校验格式与大小(file.type / file.size),不通过的标原因、不进入传输。
  • 上传中显示进度(XMLHttpRequestprogress 事件或 fetch + 流),并禁用提交按钮;失败给具体原因和「重试」。
  • 成功后提供预览或下载,并允许移除;移除要同时清掉界面状态和服务端已收到的临时文件。

正反例:同一个换头像

目标都是「把头像传上去」。差异在用户能否看到进度、原因和重试。

正例选完先本地校验,再走进度,失败给原因 + 重试

选 avatar.jpg 后立刻校验格式与大小;上传中显示墨色进度并禁用主按钮;成功后行变「已上传」可移除, 失败时写明「网络错误」并提供「重试」。

差异:每个状态都长在文件行上,用户知道卡在哪、下一步做什么。
反例只有一个「上传中…」转圈,没有进度也没有原因

选完文件只剩一个 spinner,看不出走到哪;失败只弹「出错了」,用户不知道是太大、格式不对还是网络断, 也无法重试,只能重选。

差异:只改一处——把进度、原因和重试全删掉,上传就从可控变成黑盒。

快速自测

用户上传一张 5 MB 的头像,客户端没校验,服务端最后才返回「太大」。最该改的是?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。