但是在Serverless架构下,却不能直接上传文件,因为:
- 一般情况下,一些云平台的API网关触发器会将二进制文件转换成字符串;不便直接获取和存储;
- 一般情况下,API网关与FaaS平台之间传递的数据包有大小限制,很多平台被限制在6M;
- FaaS平台大都是无状态的,即使存储到当前实例中,也会随着实例释放而导致文件丢失;
所以,传统框架中常用的上传方案是不太适合在Serverless架构中直接使用的,在Serverless架构上传文件的方法通常有两种:
- 一种是BASE64后上传,持久化到对象存储或者是NAS中,这种做法可能会触及到API网关与FaaS平台之间传递的数据包有大小限制,所以一般使用这种上传方法的通常是上传头像等小文件的业务场景;
- 第二种上传方法是通过对象存储等平台来上传,因为客户端直接通过密钥等信息来将文件直传到对象存储是有一定风险的,所以通常情况是客户端发起上传请求,函数计算根据请求内容进行预签名操作,并将预签名地址返回给客户端,客户端再使用指定的方法进行上传,上传完成之后,可以通过对象存储触发器等来对上传结果进行更新等: