前言:
了不起学弟:了不起学长,最近我开发遇到了关于存储图片和返回给图片给前端的相关内容,我不太会,可以给我讲讲吗?了不起:可以,这块其实不难,你学过几次就可以了。
正文:
一般来说,我们图片存储都会存储在专门的对象存储服务器上。常见的有阿里云oss,七牛云,华为云等等。像这些对象存储,一般都会有bucket(桶)的概念,和对象的概念。
你的项目一般都会有自己的一个桶,你就可以去桶内存储你要存储的对象。桶和对象都是有自己的权限,这个需要你自己通过后台或者接口去设置acl。
对于前端需要上传的图片,我们后端通过MultipartFile 去接受图片,然后通过阿里云的接口去把图片上传就可以了。
同时要注意,上传图片通过我们的接口,我们需要去校验文件的真实性,大小。如果没有这层校验,不管是从业务的角度,还是安全的角度,都是不可取的。
上传完图片,我们可以在相应的云上获取到图片的链接。通过这个链接我们就有以下几种方式去返回给前端了。
第一种:url可以直接返回给前端,让页面自己去加载图片。这种方式是最方便的。
第二种,后端通过url去获取到图片,然后通过HttpServletResponse.getOutPutStream ,再OutPutStream.write。
通过输出流的方式把图片给前端。这种方式比第一种方式要复杂一点,适合文件下载接口。记得流处理完了要把流关闭。
第三种方式:一些比较固定的图片,比如logo,固定的背景。我们再通过url获取到图片之后,通过Base64.getEncoder().encodeToString(byte)的方式,把图片转化成base64返回给前端。
这种方式适合一些固定图片的场景,不太适合图片太多的场景,对于前端来说有过多的base64不太合适。
温馨提示:对于一些图片需要用户主动去上传,并且会展示出来的图片,切记要进行第三方的对图片的安全检查。
了不起所在公司的一个小组,就因为出现过用户上传头像,头像非法,然后被公安约谈的情况。图片的不仅仅需要格式校验,图片内容也是需要进行安全校验的。
讲到这里大家也就明白了,图片上传的前后逻辑。对于图片上传,大家了解了,其他的文件也是同样的道理,图片,文件,视频等等都是一样的。
对于一些大一点的视频图片,可能也会涉及到分段上传,云都会有相应的api提供给大家。