服务器上传与直传
使用阿里的对象存储服务时,有两种上传文件的方式。其一是客户端上传文件内容到服务器再由服务器上传文件到阿里对象存储,这种方式简单,不绕弯,好理解,同时由于文件内容不同于业务内容,数据量不在一个量级上,会大量占用服务器带宽,特别对于固定带宽服务器,压力太大,看似简单直接的方式也造成了资源浪费。其二是由服务器从阿里OSS得到上传签名,下发到客户端,客户端使用签名直接把文件上传到阿里OSS,文件内容不再经过服务器,减少不必要的带宽占用,签名可以是PUT上传,这时HTTP的body即是二进制的文件本体,对于使用js的客户端不太友好,签名也可以是POST表单上传,这时和一般上传表单一样,对客户端也很友好。
获取表单上传参数
引入阿里OSS java SDK
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.13.1</version>
</dependency>
生成签名参数
// 给参数bearKey添加上前缀做为最终的代表文件名的key,上传的文件都在znff这个子目录里 var dir = "znff/"; var key = dir + bearKey; // 构建过期时间 这里是30秒,如果获得参数后30s未上传则这组上传参数就失效了。 long expireTime = 30; long expireEndTime = System.currentTimeMillis() + expireTime * 1000; Date expiration = new Date(expireEndTime); // 30秒
// PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。 PolicyConditions policyConds = new PolicyConditions(); policyConds.addConditionI