集成框架 -- OSS

前言

接入oss必须有这两个文档基础

使用STS临时访问凭证访问OSS_对象存储(OSS)-阿里云帮助中心
前端上传跨域


正文

sts前后端通用,开通图示

AliyunSTSAssumeRoleAccess



后端实现代码

java 复制代码
    public static void main(String[] args) {
  
        String regionId = "cn-hangzhou";
        String endpoint = "sts.cn-hangzhou.aliyuncs.com";

        String accessKeyId = "accessKeyId"; //用户提供
        String accessKeySecret = "accessKeySecret";//用户提供

        String roleArn = "acs:ram::roleArn:role/ramoss";//角色提供
        String roleSessionName = "roleSessionName";// 自定义
        String bucket =  "bucket"; // 对应创建buket 前端上传记得开跨域

        String policy = "{\n" +
                "    \"Version\": \"1\", \n" +
                "    \"Statement\": [\n" +
                "        {\n" +
                "            \"Action\": [\n" +
                "                \"oss:PutObject\"\n" +
                "            ], \n" +
                "            \"Resource\": [\n" +
                "                \"acs:oss:*:*:sc-sale-servcie/test/*\" \n" +
                "            ], \n" +
                "            \"Effect\": \"Allow\"\n" +
                "        }\n" +
                "    ]\n" +
                "}";


        Long durationSeconds = 3600L;
        try {
            DefaultProfile.addEndpoint("", regionId, "Sts", endpoint);
            IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
            // 构造client。
            DefaultAcsClient client = new DefaultAcsClient(profile);
            final AssumeRoleRequest request = new AssumeRoleRequest();

            request.setMethod(MethodType.POST);
            request.setRoleArn(roleArn);
            request.setRoleSessionName(roleSessionName);
            //request.setPolicy(policy);
            request.setDurationSeconds(durationSeconds);

			// 如果前端上传这个给前端 把跨域打开
            final AssumeRoleResponse response = client.getAcsResponse(request);
            System.out.println("Expiration: " + response.getCredentials().getExpiration());
            System.out.println("Access Key Id: " + response.getCredentials().getAccessKeyId());
            System.out.println("Access Key Secret: " + response.getCredentials().getAccessKeySecret());
            System.out.println("Security Token: " + response.getCredentials().getSecurityToken());
            System.out.println("RequestId: " + response.getRequestId());


            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build("https://oss-cn-hangzhou.aliyuncs.com", response.getCredentials().getAccessKeyId(), response.getCredentials().getAccessKeySecret(), response.getCredentials().getSecurityToken());
            PutObjectRequest putObjectRequest = new PutObjectRequest("reformer", "1/reformer.sql", new File("/Users/xushouchun/IdeaProjects/REformer-boot/fromer-start/src/main/resources/database/reformer.sql"));


            try {
                // 上传文件。
                PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
                System.out.println("putObjectResult = " + JSON.toJSONString(putObjectResult));

                // copy
                CopyObjectRequest copyObjectRequest = new CopyObjectRequest(bucket, "1/reformer.sql", bucket, "1/sql.reformer");
                ossClient.copyObject(copyObjectRequest);

                // 生成下载URL
                Date expirationDate = new Date(new Date().getTime() + durationSeconds); // URL 的有效期
                GeneratePresignedUrlRequest requests = new GeneratePresignedUrlRequest(bucket, "1/reformer.sql");
                requests.setExpiration(expirationDate);
                ossClient.generatePresignedUrl(requests);


            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }

        } catch (ClientException e) {
            System.out.println("Failed:");
            System.out.println("Error code: " + e.getErrCode());
            System.out.println("Error message: " + e.getErrMsg());
            System.out.println("RequestId: " + e.getRequestId());
        }

    }

总结

后端代码已经提供,前端就比较简单了,拿到钥匙直接upload就可以了。 一般脚手架都有,凭借url即可

前端文档: sts前端上传代码

相关推荐
small_wh1te_coder2 天前
GCC深度剖析:从编译原理到嵌入式底层实战
汇编·c++·面试·嵌入式·状态模式·c
一个高效工作的家伙4 天前
amis表单较验
状态模式
zhysunny8 天前
20.万物皆可变身术:状态模式架构全景解析
java·状态模式
橘色的喵10 天前
嵌入式C语言编程:策略模式、状态模式和状态机的应用
c语言·状态模式·策略模式·状态机
跟着珅聪学java11 天前
Spring MVC 教程
状态模式
小傅哥13 天前
【分享】拼团交易平台系统,分布式、高并发、微服务
分布式·微服务·状态模式
mit6.82415 天前
[Agent开发平台] API网关 | 业务领域 | DTO格式 | 分页令牌
人工智能·golang·状态模式
飏旎16 天前
对于前端闭包的详细理解
前端·状态模式
曾经的三心草16 天前
微服务的编程测评系统9-竞赛新增-竞赛编辑
微服务·架构·状态模式
Haven-17 天前
黑马商城微服务-下
微服务·架构·状态模式