阿里云OSS文件上传

添加依赖

复制代码
         <!--阿里云oss-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.4</version>
        </dependency>
        <!--阿里云oss java9以上版本要添加以下JAXB依赖-->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>

1、通过服务器上传

java 复制代码
// 创建OSSClient实例。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // 设置签名版本为V4
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        // 端点(例如 https://oss-cn-shenzhen.aliyuncs.com)    ACCESS_KEY      ACCESS_KEY_SECRET
        OSS ossClient = new OSSClientBuilder().build(AliConstant.ENDPOINT, AliConstant.ACCESS_KEY_ID, AliConstant.ACCESS_KEY_SECRET);


        try {

            // 创建PutObjectRequest对象。                            存储桶名称   文件名称全路径    文件字节数组
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(file.getBytes()));

            // 上传
            ossClient.putObject(putObjectRequest);
                
            //https://存储桶名称.oss-cn-shenzhen.aliyuncs.com/2025-03/e67a1e38-c83b-48f1-a17b-1db4225eae0c.jpg
            return AjaxResult.success("https://存储桶名称.oss-cn-shenzhen.aliyuncs.com/".concat(objectName));
        } catch (Exception oe) {
            throw new ServiceException("上传失败!");
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

2、通过前端直传

后端生成临时上传url,设置过期时间,即可实现前端直接上传,不用通过服务器中转

java 复制代码
     /**
     * 获取临时上传url
     */
    @Override
    public AjaxResult getTempPutUrl(String encodedTeam, String encodedMatchName) {
        if (!StringUtils.hasText(encodedTeam)){
            return AjaxResult.error("队伍为空");
        }
        if (!StringUtils.hasText(encodedMatchName)){
            return AjaxResult.error("比赛为空");
        }
        String team = URLDecoder.decode(encodedTeam, StandardCharsets.UTF_8);
        String matchName = URLDecoder.decode(encodedMatchName, StandardCharsets.UTF_8);
        String endpoint = AliConstant.ENDPOINT; // 替换为实际Endpoint
        String bucketName = AliConstant.BUCKET_NAME;
        String objectName = matchName.concat("/").concat(team).concat("/").concat(IdUtil.fastSimpleUUID()).concat(".png");

        CredentialsProvider credentialsProvider = new DefaultCredentialProvider(
                AliConstant.ACCESS_KEY_ID, AliConstant.ACCESS_KEY_SECRET);


        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .build();

        try {
            // 设置URL过期时间:
            Date expiration = new Date(System.currentTimeMillis() + 10 * 1000L);
            GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(
                    bucketName, objectName, HttpMethod.PUT);
            request.setExpiration(expiration);
            request.setProcess(null);
            request.setContentType("image/png"); // 可选:指定上传时的 Content-Type
            return AjaxResult.success(ossClient.generatePresignedUrl(request));
        } catch (Exception e) {
            e.printStackTrace();
            throw new GlobalException("获取上传STS失败");
        } finally {
            ossClient.shutdown();
        }

    }
相关推荐
小扎仙森4 天前
关于阿里云实时语音翻译-Gummy推送WebSocket
websocket·阿里云·云计算
晚秋大魔王4 天前
ubutnu 服务器配置openclaw 使用阿里云百炼模型
运维·服务器·阿里云
Shacoray4 天前
OpenClaw 接入阿里云百炼 Coding Plan 指南
阿里云·ai·云计算·qwen3·openclaw·coding plan
TG_yunshuguoji4 天前
阿里云代理商:2026 年阿里云国际站上云接入指南
服务器·阿里云·云计算
阿里云云原生4 天前
阿里云可观测 2026 年 1 月产品动态
阿里云·云计算
安当加密5 天前
用 SMS 凭据管理系统替代 HashiCorp Vault:中小企业的轻量级 Secrets 管理实践
服务器·数据库·安全·阿里云
qq_316837755 天前
使用 certbot docker镜像生成阿里云域名ssl证书
阿里云·docker·ssl
灿宝宝lo5 天前
阿里云OSS视频自动转码的配置详细步骤
阿里云·云计算·音视频
翼龙云_cloud5 天前
阿里云渠道商:如何选择适合的预留实例类型和数量?
服务器·阿里云·云计算