将图片或音频发送给前端的时候,是发文件流好还是文件地址好?

最近看了很多开源项目。
发现很多项目中,后端给前端发送音频或图片的方式有所不同,有的是直接返回的地址,有的是读取文件内容再返回文件流。
请问,这两种方式的利弊是什么?哪一种方式更好?

阅读 8.4k
4 个回答

我理解中,这个是没有什么好坏之分的,主要还是看需求。

  1. 前端能自行处理 资源地址 的前提下,直接给前端返回地址就可以了
  2. 前端不方便自行处理 资源地址 时,比如 资源地址 的域名为内网域名,公网访问不到。
    这时,就需要前/后端在服务端做一层资源转发了,因为浏览器解析不了这个地址,此时就需要文件流。

服务器端,更多的做的是一种资源转发或者资源地址保护:

  1. 转发,如域名访问不到等问题
  2. 保护,比如资源存放在某云服务器,且没有相应权限等的验证操作,服务器中做转发时,可以为资源加上相应限制操作

文件一般都单独转储到文件服务器,不占用主服务运行和带宽,使用文件流的方式,就需要自己的主服务做处理,一般不建议吧。

音频的没做过,但是图片的做过,像网站的电商平台啥的,像图片这种应该属于比较大的数据了,一般都是单独放置在一个服务器中或者没那么多单独一个文件夹中,而数据库不可能存储这种东西,因为太大了,一般存一个地址。前台访问的时候可以直接访问图片地址(由后台读取数据库)。以前是这样做的,这样做就不会占用主服务的网络io了,也就是或当我一个访问页面,页面有10个图片,如果你在这次响应中由后台用流的方式输出到浏览器那么可能会慢,耽误其他数据显示。如果传的是地址,那就很快了,但是图片大的话可能图片不能立即显示,那也没关系,起码页面没卡,浏览器会稍后把图片一个个加载出来。当然如果整个网站只有几个图片,没必要单独建一个服务器或者存储位置,直接写就写吧。

分析各自利弊

文件流:
优点:会减少一次网络请求传输。
缺点:不便于客户端缓存。

文件URL
缺点:会发生网络请求。
有点:客户端较容易缓存。

两种方案都没有绝对的好与坏,根据实际业务场景作出合理的选择。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题