springboot把图片上传到阿里云OSS

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
对象存储 OSS,内容安全 1000次 1年
简介: springboot把图片上传到阿里云OSS

springboot把图片上传到阿里云OSS

简介:本文讲解的是如何使用springboot把图片上传到阿里云OSS

阿里云OSS:阿里云对象存储服务(Object Storage Service,简称OSS)是阿里云提供的一种简单、安全、可扩展的云存储服务。它可以存储和检索任意类型的文件,包括文本、图片、音频、视频等。OSS具有高可靠性和高可用性,可以在云端存储大量的数据,并且可以通过简单的API调用来访问和管理存储的对象。

OSS提供了多种存储类型,包括标准存储、低频访问存储、归档存储等,可以根据数据的访问频率和成本要求选择合适的存储类型。同时,OSS还提供了数据加密、访问控制、数据迁移、数据备份等功能,保证了数据的安全性和可靠性。

使用阿里云OSS可以实现多种应用场景,例如网站静态文件存储、大规模数据备份和归档、云端存储和传输等。无论是个人开发者还是企业用户,都可以通过阿里云OSS来存储和管理自己的数据。

本文代码演示地址:https://gitee.com/geek-li-hua/code-in-blog.git

这里是阿里云OSS的官网:https://www.aliyun.com/product/oss

这里有免费试用

点击试用之后,退出来重新搜索OSS,然后点击管理控制台。

常见一个bucket

主要是这三处地方需要配置

代码编写

项目结构

pom.xml

  • 重点需要导入的依赖
<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
  • 完整的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.15</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>ImageUploadOss-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ImageUploadOss-demo</name>
    <description>ImageUploadOss-demo</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- Spring Boot Starter JDBC -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- Project Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- MySQL Connector/J -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.32</version>
        </dependency>
        <!-- MyBatis Plus Boot Starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!-- MyBatis Plus Generator -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.0</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

关键代码

  • 然后就编写好了核心的工具类
public class UploadUtil {
    // 阿里域名
    public static final String ALI_DOMAIN= "https://test-bucket233.oss-cn-beijing.aliyuncs.com";
    public static String uploadImage(MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return "No file uploaded"; // 如果文件为空,则返回提示信息"未上传文件"
        }
        String originalFilename = file.getOriginalFilename(); // 获取原始文件名
        String ext='.' + originalFilename.split("\\.")[1]; // 获取文件扩展名
        String uuid = UUID.randomUUID().toString().replace("-", ""); // 生成随机UUID
        String newFileName = uuid + ext; // 新文件名
        // 地域节点
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        String accessKeyID = "xxxxxxxxxxxxxx";
        String accessKeySecret = "xxxxxxxxxxxxxxxxxx";
        // OSS客户端对象
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyID, accessKeySecret);
        ossClient.putObject(
                "test-bucket233", // 仓库名
                newFileName,  // 文件名
                file.getInputStream());
        ossClient.shutdown();
        return ALI_DOMAIN + newFileName;
    }
}
  • 完整的controller
@Controller
@RequestMapping("/url-database")
public class UrlDatabaseController {
    /**
     * 上传文件方法
     *
     * @param file 要上传的文件
     * @return 返回上传结果
     */
    @Autowired
    private IUrlDatabaseService urlDatabaseService;
    @PostMapping("/upload")
    public Result addFile(MultipartFile file) throws IOException {
        String path = UploadUtil.uploadImage(file);
        if  (path.equals("No file uploaded")) {
            return Result.fail("No file uploaded");
        }
        System.out.println(path);
        if (urlDatabaseService.save(new UrlDatabase(path))){
            return Result.success(path);
        } else {
            return Result.fail("save fail");
        }
    }
    // 路由器首页
    @RequestMapping("/")
    public String index(){
        return "index.html";
    }
}

上传成功过之后,就会出现在OSS里面。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
1月前
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
666 1
|
24天前
|
存储 安全 对象存储
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
本文详细介绍了怎样帮助新手小白从注册,购买阿里云OSS,到一步一步配置OSS做为图床,和PicGo、Typora软件连接,配置好关联之后,在使用Typora写文章时,如果需要插入图片,只需要将图片复制粘贴到Typora的编辑区域,就会自动通过PicGo上传到指定图床,自动复制外网能访问的URL并展示,简直不要太方便,极大的解决了编辑文章时复制处理图片链接的痛点。
135 2
手把手教你搭建阿里云图床(PicGo+Typora+阿里云OSS),新手小白一看就会
|
27天前
|
弹性计算 前端开发 小程序
微信小程序上传文件至阿里云OSS直传(java后端签名+前端直传)
当前的通用文件上传方式是通过前端上传到服务器,再由服务器转存至对象存储。这种方式在处理小文件时效率尚可,但大文件上传因受限于服务器带宽,速度较慢。例如,一个100MB的文件在5Mbps带宽的阿里云ECS上上传至服务器需160秒。为解决此问题,可以采用后端签名的方式,使微信小程序直接上传文件到阿里云OSS,绕过服务器中转。具体操作包括在JAVA后端引入相关依赖,生成签名,并在微信小程序前端使用这个签名进行文件上传,注意设置正确的请求头和formData参数。这样能提高大文件上传的速度。
|
6天前
|
开发工具 对象存储
阿里云OSS文件上传
阿里云OSS文件上传
44 0
|
6天前
|
存储 缓存 Java
阿里云OSS实战从入门到大神
说起阿里云OSS,那作用和功能都是非常强大的,它可以存放图片,音频,视频等资源文件,这些资源文件,你不必存放到服务器的硬盘里,这样既可以节省服务器硬盘空间,又可以降低服务器的读写压力,非常适合大并发的架构。
44 0
|
21天前
|
Ubuntu JavaScript 关系型数据库
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
在阿里云Ubuntu 20.04服务器上部署Ghost博客的步骤包括创建新用户、安装Nginx、MySQL和Node.js 18.x。首先,通过`adduser`命令创建非root用户,然后安装Nginx和MySQL。接着,设置Node.js环境,下载Nodesource GPG密钥并安装Node.js 18.x。之后,使用`npm`安装Ghost-CLI,创建Ghost安装目录并进行安装。配置过程中需提供博客URL、数据库连接信息等。最后,测试访问前台首页和后台管理页面。确保DNS设置正确,并根据提示完成Ghost博客的配置。
在阿里云Ubuntu 20.04服务器中搭建一个 Ghost 博客
|
24天前
|
存储 分布式计算 网络协议
阿里云服务器内存型r7、r8a、r8y实例区别参考
在阿里云目前的活动中,属于内存型实例规格的云服务器有内存型r7、内存型r8a、内存型r8y这几个实例规格,相比于活动内的经济型e、通用算力型u1实例来说,这些实例规格等性能更强,与计算型和通用型相比,它的内存更大,因此这些内存型实例规格主要适用于数据库、中间件和数据分析与挖掘,Hadoop、Spark集群等场景,本文为大家介绍内存型r7、r8a、r8y实例区别及最新活动价格,以供参考。
阿里云服务器内存型r7、r8a、r8y实例区别参考
|
25天前
|
SQL 弹性计算 安全
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
当我们通过阿里云的活动购买完云服务器之后,并不是立马就能使用了,还需要我们设置云服务器密码,配置安全组等基本操作之后才能使用,有的用户还需要购买并挂载数据盘到云服务器上,很多新手用户由于是初次使用阿里云服务器,因此并不知道这些设置的操作流程,下面给大家介绍下这些设置的具体操作流程。
购买阿里云活动内云服务器之后设置密码、安全组、增加带宽、挂载云盘教程
|
26天前
|
弹性计算
阿里云3M带宽云服务器并发多大?阿里云3M带宽云服务器测评参考
在探讨云服务器3M带宽能支持多大并发这一问题时,我们首先要明白一个关键点:并发量并非仅由带宽决定,还与网站本身的大小密切相关。一般来说,一个优化良好的普通网站页面大小可能只有几K,为便于计算,我们可以暂且假定每个页面大小为50K。
790 1
|
2天前
|
弹性计算 应用服务中间件 Linux
阿里云ECS服务器上从零开始搭建nginx服务器
阿里云ECS服务器上从零开始搭建nginx服务器