移动端文件直传到阿里云OSS流程(JAVA获取STS凭证,以及CALLBACK回调)

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

 

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

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

2.获取sts凭证

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

如果有新建用户可以不需要新建,没有用户可以新建一个用户并且为该用户添加AliyunOSSFullAccessAliyunSTSAssumeRoleAccess两个权限。这个步骤可以得到accessKeyId,accessKeySecret两个值。

 

新建RAM角色并为新建的角色添加权限,这一步骤可以得到ARN值

 

 

以上配置工作完成以后直接写代码了。

先加入jar配置

 
  1. <dependency>

  2. <groupId>com.aliyun</groupId>

  3. <artifactId>aliyun-java-sdk-sts</artifactId>

  4. <version>3.0.0</version>

  5. </dependency>

  6. <dependency>

  7. <groupId>com.aliyun</groupId>

  8. <artifactId>aliyun-java-sdk-core</artifactId>

  9. <version>3.5.0</version>

  10. </dependency>

  11. Service层代码:

  12. public AliyunOssSts getOssSts() {

  13. String REGION_CN_SHANGHAI = "cn-shenzhen";

  14. // 当前 STS API 版本

  15. String STS_API_VERSION = "2015-04-01";

  16. // 请首先在RAM控制台创建一个RAM用户,并为这个用户创建AccessKeys

  17. String accessKeyId = "";//

  18. String accessKeySecret = "";

  19. String roleArn = "";

  20. ProtocolType protocolType = ProtocolType.HTTPS;

  21. AliyunOssSts aliyunOssSts = new AliyunOssSts();

  22. try {

  23. IClientProfile profile = DefaultProfile.getProfile(REGION_CN_SHANGHAI,accessKeyId, accessKeySecret);

  24. DefaultAcsClient client = new DefaultAcsClient(profile);

  25. // 创建一个 AssumeRoleRequest 并设置请求参数

  26. final AssumeRoleRequest req = new AssumeRoleRequest();

  27. req.setVersion(STS_API_VERSION);

  28. req.setProtocol(protocolType);

  29. req.setRoleArn(roleArn);

  30. req.setRoleSessionName("android");

  31. req.setPolicy(null);

  32. // 发起请求,并得到response

  33. final AssumeRoleResponse resp = client.getAcsResponse(req);

  34. aliyunOssSts.setExpiration(resp.getCredentials().getExpiration());

  35. aliyunOssSts.setAccessKeyId(resp.getCredentials().getAccessKeyId());

  36. aliyunOssSts.setAccessKeySecret(resp.getCredentials().getAccessKeySecret());

  37. aliyunOssSts.setSecurityToken(resp.getCredentials().getSecurityToken());

  38. aliyunOssSts.setStatusCode("200");

  39. }catch (ClientException e){

  40. aliyunOssSts.setStatusCode("500");

  41. aliyunOssSts.setErrorCode(e.getErrorCode());

  42. aliyunOssSts.setErrorMessage(e.getErrorMessage());

  43. e.printStackTrace();

  44. }catch (Exception ee){

  45. ee.printStackTrace();

  46. }

  47. return aliyunOssSts;

  48. }

  49. AliyunOssSts.java类

  50. import java.text.ParseException;

  51. import java.text.SimpleDateFormat;

  52. import java.util.Date;

  53. public class AliyunOssSts {

  54. private String expiration;

  55. private String accessKeyId ;

  56. private String accessKeySecret;

  57. private String securityToken;

  58. private String statusCode;

 
  1. Controller层

  2. @RequestMapping(value = "/ailiyunToken")

  3. public JSONObject ailiyunToken(){

  4. AliyunOssSts aliyunOssSts = aliyunOssService.getOssSts();

  5. if (aliyunOssSts!=null){

  6. JSONObject object = new JSONObject();

  7. object.put("StatusCode", aliyunOssSts.getStatusCode());

  8. object.put("Expiration", aliyunOssSts.getExpiration());

  9. object.put("AccessKeyId", aliyunOssSts.getAccessKeyId());

  10. object.put("AccessKeySecret",aliyunOssSts.getAccessKeySecret());

  11. object.put("SecurityToken", aliyunOssSts.getSecurityToken());

  12. System.out.println("==============="+object);

  13. return object;

  14. }

  15. return null;

  16. }

实际上移动端需要的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

 
  1. @RequestMapping(value = "/callback", method = RequestMethod.POST)

  2. public JSONObject callback(@RequestBody JSONObject jsonObject){

  3. String request= jsonObject.toJSONString();

  4. System.out.println("=====callback\n"+request);

  5. JSONObject result = new JSONObject();

  6. result.put("Status","OK");

  7. return   request;

  8. }

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

版权声明:本文为qq_39341192原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_39341192/article/details/89708356

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值