移动端文件直传到阿里云oss流程(java获取sts凭证,以及callback回调)

 

1.快速搭建移动端文件上传流程如下

服务器只需要提供一个sts凭证的接口,以及阿里云回调的接口。

官方文档查阅:https://help.aliyun.com/document_detail/31920.html

2.获取sts凭证

在获取凭证之前先要配置相关的用户,以及RAM访问控制

如果有新建用户可以不需要新建,没有用户可以新建一个用户并且为该用户添加AliyunOSSFullAccessAliyunSTSAssumeRoleAccess两个权限。这个步骤可以得到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;
}

 以上流程就完成了整体的移动端文件上传回调,文档有不清楚的地方欢迎提出。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值