阿里OSS云存储服务工具类

本文介绍了如何在项目中使用阿里云OSS(ObjectStorageService)进行文件的上传和获取,包括依赖管理、文件大小查询以及文件上传接口的实现,展示了OSSUtil工具类中的关键功能和方法。
摘要由CSDN通过智能技术生成

阿里云对象存储(Object Storage Service,简称OSS)是阿里云对外提供的一种海量、安全、低成本、高可靠的云存储服务。

项目需要的依赖

        <!-- HuTool工具类
        参考文档地址:https://www.hutool.cn/docs/#/
        API文档地址:https://apidoc.gitee.com/loolly/hutool/ -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.1</version>
        </dependency>

        <!-- 阿里云OSS对象存储-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
                <exclusion>
                    <artifactId>commons-codec</artifactId>
                    <groupId>commons-codec</groupId>
                </exclusion>
            </exclusions>
        </dependency>

工具类

@Slf4j
@Component
public class OssUtil {

    @Value("${aliyun.oss.bucket}")
    private String bucket;

    @Autowired
    private OSS ossClient;


    /**
     * 获取OSS文件大小
     *
     * @param path
     * @return
     */
    public long getObjectSize(String path) {
        log.info("OSS获取文件大小,path:{}", path);
        ObjectListing objectListing = ossClient.listObjects(bucket, path);
        log.info("OSS获取文件大小,响应结果:{}", JSON.toJSONString(objectListing));
        if (objectListing != null && CollectionUtils.isNotEmpty(objectListing.getObjectSummaries())) {
            List<OSSObjectSummary> objectSummaries = objectListing.getObjectSummaries();
            return objectSummaries.get(0).getSize();
        }
        return 0;
    }

    /**
     * 文件上传oss
     *
     * @param inputStream 文件数组
     * @param path        上传的文件夹(bucket下的如cem-web等 多级:cem-web/aaa)
     * @param suffix
     * @return
     */
    public String upload(InputStream inputStream, String path, String suffix) {
        log.info("OSS文件上传,入参path:{}", path);
        String uploadKey = null;
        log.info("OSS文件上传,建立连接");
        try {
            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            String fileName = UUIDUtil.getUUID().concat(".").concat(suffix);
            uploadKey = path.concat("/").concat(fileName);
            log.info("OSS文件上传,Key:{}", uploadKey);
            PutObjectResult putObjectResult = ossClient.putObject(bucket, uploadKey, inputStream);
            log.info("OSS文件上传,处理结果:{}", JSON.toJSONString(putObjectResult));
        } catch (Exception e) {
            log.error("音频文件OSS上传处理异常:", e);
        }
        log.info("OSS文件上传结束,返回文件OSS存储路径:{}", uploadKey);
        return uploadKey;
    }

    /**
     * 文件上传oss(直接传入key)
     *
     * @param inputStream 文件数组
     * @param uploadKey
     * @return
     */
    public String upload(InputStream inputStream, String uploadKey) {
        log.info("OSS文件上传,uploadKey:{}", uploadKey);
        log.info("OSS文件上传,建立连接");
        try {
            // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            log.info("OSS文件上传,Key:{}", uploadKey);
            PutObjectResult putObjectResult = ossClient.putObject(bucket, uploadKey, inputStream);
            log.info("OSS文件上传,处理结果:{}", JSON.toJSONString(putObjectResult));
            inputStream.close();
        } catch (Exception e) {
            log.error("音频文件OSS上传处理异常:", e);
        }
        log.info("OSS文件上传结束,返回文件OSS存储路径:{}", uploadKey);
        return uploadKey;
    }

    public String encodeName(String name) {
        return URLEncoder.DEFAULT.encode(name, StandardCharsets.UTF_8);
    }

    /**
     * 获取OSS文件流
     */
    public InputStream getObjectStream(String path) {
        try {
            OSSObject object = ossClient.getObject(bucket, path);
            return object.getObjectContent();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OSS阿里云对象存储服务)是阿里云提供的一种云存储服务,用于在云端存储和管理各种类型的数据。在使用OSS服务时,我们可能会遇到需要管理对象的生命周期,即设置对象的存储周期,比如指定对象何时转为冷存储或删除的需求。为了方便开发者管理OSS对象的生命周期,阿里云提供了一种Java工具类,即OSS声明周期工具类OSS声明周期工具类提供了一套简便的方式来设置OSS对象的生命周期规则。通过该工具类,我们可以配置对象的存储周期,包括两个主要方面:转为低频访问存储和删除对象。其中,转为低频访问存储是指将对象从标准存储转移到低频访问存储,以降低成本,适用于长期不被频繁访问的对象;删除对象是指在一定时间后自动删除对象,以减少存储空间的占用。通过设置不同的规则和条件,可以实现对不同对象的不同管理策略。 使用OSS声明周期工具类,我们可以通过代码的方式配置和管理OSS对象的存储周期,避免了手动操作的繁琐和错误。通过调用工具类提供的API,我们可以设置存储周期的开始时间、转为低频访问存储的时间、删除的时间等各种参数,灵活满足不同的业务需求。此外,工具类还提供了其他常用的方法,例如获取已配置的生命周期规则、启用或停用生命周期规则等等,方便开发者进行管理和操作。 总之,OSS声明周期工具类为我们在阿里云OSS上管理对象的生命周期提供了便捷的方式。通过使用该工具类,我们可以简化配置和管理的流程,提升效率,并且更好地满足不同对象的不同管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值