【SpringBoot实战】基于阿里云实现文件上传

【SpringBoot实战】基于阿里云实现文件上传

在实际项目开发中,不可避免地会使用到阿里云OSS进行文件存储。尽管阿里云有详细的开发文档,但本篇博客的目的是让我们能够用简明的代码快速实现这个功能。

引入依赖

xml 复制代码
<dependencies>
    <!-- 阿里云oss依赖 -->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.9.1</version>
    </dependency>
    <!-- 日期工具栏依赖 -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10.1</version>
    </dependency>
</dependencies>

文件上传

java 复制代码
public String fileUpload(MultipartFile file) {
        String endpoint = "endpoint";  // 如:oss-cn-shanghai.aliyuncs.com
        String keyId = "keyId";
        String keySecret = "keySecret";
        String bucketName = "bucketName";  // bucket名称
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, keyId, keySecret);
        try {
            InputStream inputStream = file.getInputStream();
            // 文件实际名称
            String filename = file.getOriginalFilename();
            // 使用uuid确保文件名唯一
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            // 对上传文件进行分组,根据当前年/月/日
            String date = new DateTime().toString("yyyy/MM/dd");
            filename = date + "/" + uuid + filename;
            // 创建PutObjectRequest对象
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, filename, inputStream);
            // 设置该属性可以返回response。如果不设置,则返回的response为空
            putObjectRequest.setProcess("true");
            // 上传文件
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            // 返回文件的url
            return result.getResponse().getUri();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return null;
    }
相关推荐
矛取矛求1 小时前
C++ 标准库参考手册深度解析
java·开发语言·c++
cijiancao1 小时前
23 种设计模式中的解释器模式
java·设计模式·解释器模式
南七行者1 小时前
对模板方法模式的理解
java·设计模式·模板方法
麻芝汤圆1 小时前
MapReduce 的广泛应用:从数据处理到智能决策
java·开发语言·前端·hadoop·后端·servlet·mapreduce
努力的搬砖人.1 小时前
java如何实现一个秒杀系统(原理)
java·经验分享·后端·面试
哈哈哈哈哈哈哈哈哈...........2 小时前
【java】在 Java 中,获取一个类的`Class`对象有多种方式
java·开发语言·python
fallwind_of_july2 小时前
java项目分享-分布式电商项目附软件链接
java·redis·分布式·mongodb·elasticsearch·微服务·rabbitmq
武昌库里写JAVA2 小时前
Golang的消息中间件选型
java·开发语言·spring boot·学习·课程设计
工一木子2 小时前
大厂算法面试 7 天冲刺:第6天-树与图深度剖析——高频算法面试题 & Java 实战
java·算法·面试
振鹏Dong2 小时前
字符串——面试考察高频算法题
java·数据结构·算法