上传、预览、下载图片是app常用的功能之一,一般的做法是建立一个图片存储服务器,再开发一个接收前端上传文件的后端服务,接收到前端上传的图片文件,然后再调用存储服务器的接口完成图片文件的存储。
现在阿里云提供了对象存储云服务(OSS),非常方便APP直接将图片等文件上传上去,并提供了多种浏览、下载的方式,不仅操作简单、而且效率高、速度快,本文介绍三种使用方式,希望能够让工程师少走弯路。
传统模式
这种方式只是把OSS作为文件存储体替代了自建存储器,上传逻辑和路径还是和传统的方式一致,后端服务给前端提供上传接口,在收到前端上传的文件后,再调用阿里云的OSS SDK的API将文件上传到阿里云的OSS存储桶中。
![0605dbba7dc8bf347f1487fdc10d2a44.png](https://img-blog.csdnimg.cn/img_convert/0605dbba7dc8bf347f1487fdc10d2a44.png)
上传流程
详细说明及相关代码请参考《云平台对象存储OSS》
直接表单方式
这种方式更加的便捷、快速,无需开发接收后端服务,而是前端直接将文件上传到OSS,这种方式就要求前端按照约定的参数访问OSS API,为了安全起见要按照阿里云SDK的方式生成相应的签名并提供给前端。
![54f37efafd5967765847f9e47261a4ca.png](https://img-blog.csdnimg.cn/img_convert/54f37efafd5967765847f9e47261a4ca.png)
FORM表单直接上传流程
这里要求提前生成签名串,生成算法如下:
package aliyun;import aliyun.pojo.ResultData;import aliyun.pojo.SignatureData;import com.alibaba.fastjson.JSONObject;import org.apache.commons.codec.binary.Base64;public class Controller { private final static String POLICY="{"expiration":"2025-12-31T23:59:59Z","conditions":[["content-length-range",0,104857600]]}"; private String accessKeySecret = System.getenv("ACCESS_SECRET_CODE"); public String signatureCode(int times) throws Exception { ResultData resultData=new ResultData(); //约束规则 String encodePolicy = new String(Base64.encodeBase64(POLICY.getBytes()));