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

    }
相关推荐
阿里云大数据AI技术38 分钟前
全模态、多引擎、一体化,阿里云DLF3.0构建Data+AI驱动的智能湖仓平台
人工智能·阿里云·云计算
摇滚侠44 分钟前
阿里云安装的 Redis 在什么位置,如何找到 Redis 的安装位置
redis·阿里云·云计算
_运维那些事儿18 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
小白考证进阶中1 天前
阿里云ACA热门科目有哪些?考什么内容?
阿里云·阿里云认证·云计算运维·阿里云aca证书·阿里云aca认证·阿里云aca·aca证书
主机哥哥1 天前
2026年阿里云五种方案快速部署 OpenClaw(Clawdbot)详细教程
阿里云·云计算
翼龙云_cloud1 天前
阿里云代理商: 如何选择适合自己的阿里云 ECS 配置?
服务器·阿里云·云计算
Apache Flink1 天前
Flink 实时计算 x SLS 存储下推:阿里云 OpenAPI 网关监控平台实践
大数据·阿里云·flink·云计算
小魏小魏我们去那里呀2 天前
Alibaba Cloud DevOps Integration For JetBrains 插件使用指南
ide·阿里云·devops·jetbrains
翼龙云_cloud2 天前
阿里云渠道商:阿里云弹性伸缩如何助力海量数据采集?
服务器·阿里云·云计算
Vivienne_ChenW2 天前
Apollo 配置中心核心用法(实战版)
java·开发语言·分布式·阿里云·产品运营