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;
-
}
以上流程就完成了整体的移动端文件上传回调,文档有不清楚的地方欢迎提出。
版权声明:本文为qq_39341192原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39341192/article/details/89708356