1.快速搭建移动端文件上传流程如下
服务器只需要提供一个sts凭证的接口,以及阿里云回调的接口。
官方文档查阅:https://help.aliyun.com/document_detail/31920.html
2.获取sts凭证
在获取凭证之前先要配置相关的用户,以及RAM访问控制
如果有新建用户可以不需要新建,没有用户可以新建一个用户并且为该用户添加AliyunOSSFullAccess,AliyunSTSAssumeRoleAccess两个权限。这个步骤可以得到accessKeyId,accessKeySecret两个值。
新建RAM角色并为新建的角色添加权限,这一步骤可以得到ARN值
以上配置工作完成以后直接写代码了。
先加入jar配置
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sts</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.5.0</version>
</dependency>
Service层代码:
public AliyunOssSts getOssSts() {
String REGION_CN_SHANGHAI = "cn-shenzhen";
// 当前 STS API 版本
String STS_API_VERSION = "2015-04-01";
// 请首先在RAM控制台创建一个RAM用户,并为这个用户创建AccessKeys
String accessKeyId = "";//
String accessKeySecret = "";
String roleArn = "";
ProtocolType protocolType = ProtocolType.HTTPS;
AliyunOssSts aliyunOssSts = new AliyunOssSts();
try {
IClientProfile profile = DefaultProfile.getProfile(REGION_CN_SHANGHAI,accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
// 创建一个 AssumeRoleRequest 并设置请求参数
final AssumeRoleRequest req = new AssumeRoleRequest();
req.setVersion(STS_API_VERSION);
req.setProtocol(protocolType);
req.setRoleArn(roleArn);
req.setRoleSessionName("android");
req.setPolicy(null);
// 发起请求,并得到response
final AssumeRoleResponse resp = client.getAcsResponse(req);
aliyunOssSts.setExpiration(resp.getCredentials().getExpiration());
aliyunOssSts.setAccessKeyId(resp.getCredentials().getAccessKeyId());
aliyunOssSts.setAccessKeySecret(resp.getCredentials().getAccessKeySecret());
aliyunOssSts.setSecurityToken(resp.getCredentials().getSecurityToken());
aliyunOssSts.setStatusCode("200");
}catch (ClientException e){
aliyunOssSts.setStatusCode("500");
aliyunOssSts.setErrorCode(e.getErrorCode());
aliyunOssSts.setErrorMessage(e.getErrorMessage());
e.printStackTrace();
}catch (Exception ee){
ee.printStackTrace();
}
return aliyunOssSts;
}
AliyunOssSts.java类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class AliyunOssSts {
private String expiration;
private String accessKeyId ;
private String accessKeySecret;
private String securityToken;
private String statusCode;
Controller层
@RequestMapping(value = "/ailiyunToken")
public JSONObject ailiyunToken(){
AliyunOssSts aliyunOssSts = aliyunOssService.getOssSts();
if (aliyunOssSts!=null){
JSONObject object = new JSONObject();
object.put("StatusCode", aliyunOssSts.getStatusCode());
object.put("Expiration", aliyunOssSts.getExpiration());
object.put("AccessKeyId", aliyunOssSts.getAccessKeyId());
object.put("AccessKeySecret",aliyunOssSts.getAccessKeySecret());
object.put("SecurityToken", aliyunOssSts.getSecurityToken());
System.out.println("==============="+object);
return object;
}
return null;
}
实际上移动端需要的ststoken的格式
{
"SecurityToken": "CAIS7wF1q6Ft5B2yfSjIr4nXCdSNlJVL0qyzb1TSplUmSPxcmaTGrjz2IHtMe3RgB+kdtvQ/m2hZ6foflq56TZNfQk3INQ2oLDuZtFHPWZHInuDox55m4cTXNAr+Ihr/29CoEIedZdjBe/CrRknZnytou9XTfimjWFrXWv/gy+QQDLItUxK/cCBNCfpPOwJms7V6D3bKMuu3OROY6Qi5TmgQ41ct2T0gsv7mk5LMu0CC1meXkLFF+97DRbG/dNRpMZtFVNO44fd7bKKp0lQLsEAVqfco1fccqWeY5oDCXwRLghyCMvvJ9MZzNx+rzUK5snnHxhqAAVcptReWQo4M28MOExrk/lJZDA5/iyuF6E5Hfv5y0GXzkl6hLskF7m7Ajb/E+PCxnX72g+OZvBKpYq1p4dKl3l/YKaRe2QEflkb0bH28Q0FXIzJr1fiXT2UR1hfvuK8XYGWL/nKqFwoZPEh4mdMirWT9rVkYENPJFzyDaVATfg9S",
"AccessKeyId": "STS.NJbBn9yJjenXmrcBUsDspvamL",
"AccessKeySecret": "9iu44VSf5Xi8msk1VCGZvxpXfDmBjDkFaK6Nxqnn94Xs",
" Expiration ": "2019-04-29 11:46:05",
"StatusCode": "200"
}
到这里为止做为一个后台的开发获取ststoken的事情就做完了,剩下的就可以交给前台了。
3.阿里云服务器回调,那就更简单了,直接一个JsonObject接手就ok了。
官方的文档:https://help.aliyun.com/document_detail/31922.html?spm=a2c4g.11186623.6.1240.65f74947OOE2u8
@RequestMapping(value = "/callback", method = RequestMethod.POST)
public JSONObject callback(@RequestBody JSONObject jsonObject){
String request= jsonObject.toJSONString();
System.out.println("=====callback\n"+request);
JSONObject result = new JSONObject();
result.put("Status","OK");
return request;
}
以上流程就完成了整体的移动端文件上传回调,文档有不清楚的地方欢迎提出。