集成框架 -- 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前端上传代码

相关推荐
星恒随风7 天前
C++ string 类详解:常用接口、OJ 场景与模拟实现中的深浅拷贝
开发语言·c++·笔记·学习·状态模式
colofullove9 天前
实时游玩页与 WebSocket 状态管理实现
websocket·网络协议·状态模式
夏天测9 天前
业务逻辑漏洞实战:篡改响应包绕过登录,直入后台管理系统
渗透测试·状态模式·业务逻辑漏洞·web 安全·响应包篡改
可乐ea10 天前
【Spring Boot + MyBatis|第7篇】JWT 登录认证与拦截器实现
java·spring boot·后端·mybatis·状态模式
前端不太难10 天前
GPU 集群调度架构解析
架构·状态模式
ShiJiuD66688899910 天前
外卖项目笔记总结上 (后端板块)
状态模式
前端不太难10 天前
当 AI 接管 Workspace:鸿蒙 PC Agent 架构设计实践
人工智能·状态模式·harmonyos
Maimai1080811 天前
Web3 前端实时通信如何落地:从 SSE 订阅到行情、订单与账户状态更新
前端·javascript·react.js·前端框架·web3·状态模式
不吃青椒!12 天前
LangGraph 流式事件处理:从实战到体系
ai·langchain·状态模式
前端不太难12 天前
鸿蒙游戏世界模型:实现原理 + Demo实现
游戏·状态模式·harmonyos