你所知道 &不知道的「文件上传」

9 评论 11973 浏览 161 收藏 7 分钟

本文从文件上传的三个阶段:「上传前」、「上传时」、「上传后」来说明作者现在已知的所有文件上传问题,来看看~

好久没有动笔了,久到都快要忘记文字应该怎么写、开头怎么写。最近做完了一个内部系统,趁下一个还在路上,总结一下在这个系统里遇到的「文件上传」问题。当我在准备这篇文章的素材的时候,发现自己在做「文件上传」时仍有部分细节没有考虑到,产品之路还很长,仍需不断总结、不断努力呀。

老规矩,为啥需要上传文件呢?不上传行不行得通?

涉及多方沟通的系统,肯定是需要文件往来,此时上传文件就成了系统不可或缺的功能。不上传肯定是不行的啊,任务流会断开,大家都不舒服。

额,既然绕不开,那要怎么做呢?

我会从「文件上传」的「上传前」、「上传时」、「上传后」三个阶段来说明我现在已知的所有文件上传问题。

一、上传前

需要明确什么文件可以上传,可以进入「上传时」的流程,具体包括:

支持什么样的文件格式? 图片?psd?pdf?word?excel?zip?rar?全部?

  1. 支持什么样的上传方式? 拖拽上传?点击上传?复制粘贴上传?
  2. 支持多大的文件? 业务有没有要求?服务器有没有限制?阿里云最大限制 20M。
  3. 一次支持上传多少文件? 单个上传?批量上传?
  4. 异常文件怎么处理? 已经上传过的文件是否还能再次上传? 空文件是否可以上传? 一次性上传多个同名文件怎么处理?

二、上传中

嗯,「上传前」里的系统野怪打完了,接下来,该处理「上传中」的野怪了。

  1. 上传过程中是否要显示上传进度?上传进度怎么处理?通过浏览器上传文件是无法获取文件上传进度的。
  2. 上传过程中是否要进行数据校验?
  3. 上传过程中是否允许取消上传?
  4. 是否支持断点续传?
  5. 上传失败时最大重试次数?一次上传失败就算失败?还是在用户无感知的情况下上传 3 次失败才算失败?
  6. 上传的文件尤其是图片是否需要压缩?压缩规则是什么?(什么时候需要压缩?怎么压缩?期望结果是什么?)是否需要存储原图?

三、上传后

文件上传成功了,那后续还要做哪些任务才能完美通过呢?

(1)文件什么时候上传到服务器?选择文件后自动上传?绑定其他事件触发上传?

  • 上传成功之后立即上传。服务器里多余的图片怎么处理?是否需要一个专门的清除多余图片的方法,检测文件是否在数据库里有记录,没有就删除,定时运行该程序。
  • 用户点击“确定”一起把数据提交到后台?如果用户此时刷新界面或者关闭界面,文件可能无法保留。

(2)上传后的文件是否需要预览?预览的规则是什么?直接缩放?显示中间部分?

(3)上传后的文件是否需要下载?

(4)上传后的文件是否支持删除?

(5)上传后的文件是否需要重命名?重命名的规则是什么?按照时间随机数?不重命名可能出现什么问题?

(6)如果允许多次上传,那么采用追加还是覆盖?

以上就是所有我能想到的文件上传中的野怪,接下来说一下自己遇到的坑吧。

坑1:psd文件变 png

关于 psd 文件在浏览器中的上传:chrome 浏览器会把它当作 image 文件上传,剪切板粘贴会转为 png 图片上传;safari 浏览器会把它当作 file 文件上传,剪切板不能粘贴该文件上传。至于其它浏览器是怎么处理的,我们没做兼容,如果你有兴趣,可以研究之后告诉我。

坑2:文件名含空格导致没法下载

坑3:文件名含特殊字符导致预览出现问题

坑2 和坑3 其实是一个问题,都是因为没有对用户上传的文件进行重命名或特殊字符进行过滤导致的。踩了坑之后,才去研究了一下,发现钉钉也没有处理特殊字符的问题,图片缩略图显示有问题,心里一阵窃喜。

不过,现在再去看的时候,发现钉钉已经把这个问题修复了,大家都是在让自己的产品越来越好。

坑4:图片拖拽的拖拽区域太小,导致用户体验很差

支持拖拽这种上传,一定要设置足够大的拖拽区域,不然拖拽这个功能就很难用,还不如点击上传。上线之后,用户也不太喜欢用,那么开发这个功能的意义也就不大。

所以说,做产品还是要做得好一点,这样晚上才睡得安心。

嗯,该分享的内容分享完了,这次就到这里啦。我们,下次再见。

—— End ——

 

本文由 @Q_misky 原创发布于人人都是产品经理。未经许可,禁止转载

 

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 我….还以为会有答案呢,还想看看作者怎么处理这个问题的,没想到都是问题,正愁如何解决所有问题 呃呃呃…

    来自广东 回复
  2. 预览的逻辑您当时是怎么设计的呢

    来自广东 回复
  3. 我想问下15s短视频上传多大需要前端压缩,前端压缩是可以压缩到指定范围还是说不确定的,第二视频分辨率怎么定,其实就是您说的上传前要做哪些处理,上传中(可略),上传后要做哪些处理

    回复
  4. 百度网盘上传文件是分类上传,而TimQQ则是所有分类都可以直接上传,实在是想不明白,这两种有啥区别

    来自河北 回复
  5. 学习了

    来自河北 回复
  6. 1.单人最大支持多少任务同时上传
    2.服务器最大支持多少任务同时上传
    3.各状态任务排序和展示
    4.若服务器即将达到上限,是否需要进行大文件和小文件上传区分

    来自广东 回复
    1. 哇,感谢补充,服务器这端我都没怎么考虑到。 😉

      来自四川 回复
  7. 好厉害 学习了

    来自广东 回复
    1. 嘻嘻,如果你有疑问,可以提哈~

      来自四川 回复