图片上传在现在的应用开发中可谓是家常便饭,基本上每个应用都会涉及到。小到头像图标,大到社交照片等等。对于传统的Web应用来说,图片上传可以说是一个很微不足道的需求了,只是这样的一个小需求,想要做到极致,却并非易事。
需求多变
你可能会觉得就是简单的文件上传还需要什么需求呢?对于图片上传来说,从业务层面来说要涉及到的技术点很多。比如图片大小的限制,图片格式的限制,上传后是否需要压缩图片。特别是当你图片的上传量大了之后,通过怎样的方式来管理这么多的图片资源。而这些都是我们开发中需要考虑的点。
用户体验
用户体验这一块可谓是仁者见仁智者见智,但是不外乎的几个方面都一样。 重中之重的就是上传进度的显示,其实在于产品的设计过程中,如果没有进度显示用户心中会有焦虑感。当他无法感知到上传进度的时候,用户的流失率就会提高。 还有一个就是上传时的缩略图预览,你要让用户知道他现在选择的是那一张图,有没有选择到了不可描述的图片,而这个在提升用户对产品的认可度上大有裨益。 最后一个对于已上传图片的删除与位置拖动,其实这个需求在用户体验上来说主要还是要根据具体的业务,如果是后台的应用那就完全没有必要了;而如果是社交分享类的,那就可以说是重中之重了。
容错处理
一份良好健壮的代码,对于错误的处理和提示不亚于用户体验。当用户在上传出问题的时候却没有相应的提示,想想看这时候他的心里会是怎样的。
对于错误处理要包括图片太大,图片格式不正确以及上传数量超限制。对于服务端的错误也要给出相应的提示,这样才算是一个完整的图片上传组件。
支持并发
其实这一块并不能算作图片上传中的一部分,但还是值得来讲一下。传统Web应用中,图片都是传到服务端直接存储,这样如果上传量大的话,服务器的带宽和磁盘就成了瓶颈,这时或许会提高带宽上SSD等。但是在云时代,或许选择云存储是个更好的选择。传统架构都是都是先传到服务器然后再从服务器到云存储,这样瓶颈依旧是在服务器。其实我们完全可以直传到云存储,把压力转接到专业的人来做,我们专注于业务即可。
对于一个简单的图片上传其实还是有很多的知识点在里面,前些日子花了点时间开源了一个这样的Laravel组件,支持直传图片到第三方云存储,使用起来非常方便,欢迎Star。
https://github.com/wh469012917/laravel-uploader