阿里云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();
        }

    }
相关推荐
忧郁蓝调263 小时前
Redis不停机数据迁移:基于 redis-shake 的跨实例 / 跨集群同步方案
运维·数据库·redis·阿里云·缓存·云原生·paas
HelloWorld__K8 小时前
整合阿里云短信服务
数据库·阿里云·云计算
未来之窗软件服务9 小时前
服务器运维(二十一)阿里云系统镜像本地装机img文件—东方仙盟练气期
运维·服务器·阿里云·仙盟创梦ide·东方仙盟·国产化操作系统·img镜像
数据库知识分享者小北9 小时前
即将开源 | 阿里云Tair KVCache Manager:企业级全局 KVCache 管理服务的架构设计与实现
数据库·阿里云·nosql数据库·tair
咕噜企业分发小米10 小时前
阿里云和华为云在AI视频领域有哪些扶持政策?
人工智能·阿里云·华为云
咕噜企业分发小米10 小时前
阿里云和华为云在人工智能领域有哪些扶持政策?
人工智能·阿里云·华为云
翼龙云_cloud10 小时前
阿里云云渠道商:GPU 服务器安全组配置指南 3 步解决端口开放问题
运维·服务器·安全·阿里云·云计算
风吹落叶花飘荡1 天前
2026 在阿里云(Aliyun)上实现 Certbot 自动化申请
阿里云·自动化·云计算
木子欢儿1 天前
阿里云系统磁盘总读BPS突然增长很高,导致网站502 Bad Gateway
阿里云·云计算·gateway