如何在Spring Boot中实现图片上传至本地和阿里云OSS

在开发Web应用时,处理文件上传是常见的需求之一,尤其是在涉及到图片、视频等多媒体数据时。本文将详细介绍如何使用Spring Boot实现图片上传至本地服务器以及阿里云OSS存储服务,并提供完整的代码示例。

一、上传图片至本地

首先,我们来看如何在Spring Boot项目中实现图片上传至本地的功能。这通常涉及接收前端发送的文件流,然后将其保存到服务器上的指定目录。

代码示例:

java 复制代码
@RestController
public class FileController {

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();
        String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        file.transferTo(new File("D:\\img\\" + filename));
        return Result.success();
    }
}

上述代码中,MultipartFile用于接收上传的文件,通过transferTo()方法将文件保存到本地磁盘。

二、上传图片至阿里云OSS

当应用需要处理大量或大体积的文件时,使用云存储服务如阿里云OSS可以显著提高系统的稳定性和可扩展性。下面是如何在Spring Boot中集成阿里云OSS并上传文件的步骤。

引入依赖:

在pom.xml中添加以下依赖以支持阿里云OSS和JDK 9以上的环境。

xml 复制代码
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>
<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>

封装工具类:

创建一个工具类AliOssUtil来处理与OSS的交互,包括上传文件。

java 复制代码
public class AliOssUtil {

    private static final String ENDPOINT = "https://oss-cn-beijing.aliyuncs.com";
    private static final String ACCESS_KEY_ID="XXXXXXXXXXXXXXXX";
    private static final String ACCESS_KEY_SECRET="XXXXXXXXXXXXXXXXXXXXXX";
    private static final String BUCKET_NAME = "XXXXXXXXXX";

    public static String uploadFile(String objectName, InputStream in) throws Exception {
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
        try {
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);
            PutObjectResult result = ossClient.putObject(putObjectRequest);
            String url = "https://" + BUCKET_NAME + "." + ENDPOINT.substring(ENDPOINT.lastIndexOf("/") + 1) + "/" + objectName;
            return url;
        } finally {
            ossClient.shutdown();
        }
    }
}

Controller代码:

修改FileController,使用AliOssUtil上传文件。

java 复制代码
@RestController
public class FileController {

    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws Exception {
        String originalFilename = file.getOriginalFilename();
        String filename = UUID.randomUUID() + originalFilename.substring(originalFilename.lastIndexOf("."));
        String url = AliOssUtil.uploadFile(filename, file.getInputStream());
        return Result.success(url);
    }
}

通过上述步骤,你可以轻松地在Spring Boot应用中实现文件上传至本地和阿里云OSS的功能。这不仅提高了应用的灵活性,还优化了资源管理,使得大规模文件存储更加高效。

相关推荐
sg_knight1 小时前
Spring 框架中的 SseEmitter 使用详解
java·spring boot·后端·spring·spring cloud·sse·sseemitter
Dolphin_Home3 小时前
笔记:SpringBoot静态类调用Bean的2种方案(小白友好版)
java·spring boot·笔记
喵个咪4 小时前
初学者入门:用 go-kratos-admin + protoc-gen-typescript-http 快速搭建企业级 Admin 系统
后端·typescript·go
刘一说4 小时前
Nacos 权限控制详解:从开源版 v2.2+ 到企业级安全实践
spring boot·安全·spring cloud·微服务·nacos·架构·开源
Q_Q5110082855 小时前
python+django/flask+vue的大健康养老公寓管理系统
spring boot·python·django·flask·node.js
用户21411832636026 小时前
手把手教你用Claude制作专属PPT生成器-从模板学习到自动生成全流程实战
后端
czlczl200209256 小时前
通过哪些条件确定用哪个消息转换器
spring boot
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 个人健康管理系统为例,包含答辩的问题和答案
java·spring boot
qq_12498707536 小时前
基于微信小程序的线下点餐系统的设计与实现(源码+论文+部署+安装)
spring boot·微信小程序·小程序·毕业设计
IT_Octopus7 小时前
Java GZip 压缩实践 +实践思考 +进一步压榨性能和存储方案思考:Protobuf+ GZip
java·spring boot