阿里云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技术8 小时前
Hologres Dynamic Table 在淘天价格力的业务实践
大数据·人工智能·阿里云·hologres·增量刷新
我爱娃哈哈16 小时前
SpringBoot + MinIO + 阿里云 OSS:文件上传下载、分片断点续传全链路方案
spring boot·后端·阿里云
Elieal20 小时前
基于 Spring MVC + 阿里云通义千问的 AI 助手开发
spring·阿里云·mvc
翼龙云_cloud20 小时前
阿里云渠道商:弹性伸缩爬虫实战 智能应对流量高峰的 3 步方案
爬虫·阿里云·云计算
昱景1 天前
亲测有效:锡膏选择实践经验分享
阿里云
Serverless社区2 天前
进阶指南:BrowserUse + Agentrun Sandbox 最佳实践指南
运维·阿里云·云原生·serverless·函数计算
安当加密2 天前
电力系统如何防“明文传输”?某电网公司用SM2+UKey构建“端到端加密”实战
服务器·数据库·安全·阿里云
翼龙云_cloud2 天前
阿里云渠道商:云服务计费 按量 包年 预留实例怎么选?
服务器·阿里云·云计算
gaize12132 天前
阿里云ECS云服务器怎么样?值得入手吗?最新测评
服务器·阿里云·云计算
咕噜企业分发小米2 天前
阿里云与华为云基因测序数据同步的日志内容中,哪些字段对于故障排查最为关键?
数据库·阿里云·华为云