使用SpringBoot将图片上传至阿里云OSS

这篇具有很好参考价值的文章主要介绍了使用SpringBoot将图片上传至阿里云OSS。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. 对象存储OSS

1. 什么是OSS?

官方的解释是这样的:阿里云对象存储OSS(Object Storage Service)是一款海量、安全、低成本、高可靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。
官网:对象存储OSS

2. 为什么要使用OSS?

作者认为主要是方便项目上线后的文件业务的处理,试想一下:大多数人都不会把自己电脑直接上当本地服务器上直接上线项目吧,如果用云服务器访问量大的话又有点占空间,也无法对图片进行加密,但我们用到OSS存储文件就可以解决大部分问题了

二. 开通 OSS

第一步,登录阿里云官网,搜索“OSS”关键字,进入 OSS 产品页。
使用SpringBoot将图片上传至阿里云OSS

第二步,购买套餐
使用SpringBoot将图片上传至阿里云OSS

新人好像有优惠活动,笔者没看到花钱买的觉得血亏(虽然只有几块)

使用SpringBoot将图片上传至阿里云OSS

第三步,进入 OSS 管理控制台,点击Bucket 列表,点击创建 Bucket
使用SpringBoot将图片上传至阿里云OSS

使用SpringBoot将图片上传至阿里云OSS

注意:读写权限为“公共读”,也就是允许互联网用户访问云空间上的图片。

第四步:确认就行

三、SpringBoot 整合 OSS 实现文件上传

1. 在 pom.xml 文件中添加 OSS 的依赖。
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.14.0</version>
</dependency>
2. 在 application.yml 文件中添加 OSS 配置项。
aliyun:
  oss:
    # oss对外服务的访问域名
    endpoint: oss-cn-guangzhou.aliyuncs.com
    # 访问身份验证中用到用户标识(填自己的)
    accessKeyId: LTAI5xxxxxxxxxx
    # 用户用于加密签名字符串和oss用来验证签名字符串的密钥(填自己的)
    accessKeySecret: xxxxxxxx
    # oss的存储空间
    bucketName: baridhu
    # 上传文件大小(M)
    maxSize: 3
    # 上传文件夹路径前缀
    dir:
      prefix: helloworld/
补充:如何获取自己的用户标识和密钥

1. 把鼠标移动到自己头像位置会出悬浮框,我们选择AccessKey管理
使用SpringBoot将图片上传至阿里云OSS
2. 创建AccessKey
使用SpringBoot将图片上传至阿里云OSS
使用SpringBoot将图片上传至阿里云OSS
剩下的按着操作就行了,不再赘叙了

3. 创建配置类OssClientConfig.java
@Configuration
public class OssClientConfig {
    @Value("${aliyun.oss.endpoint}")
    String endpoint ;
    @Value("${aliyun.oss.accessKeyId}")
    String accessKeyId ;
    @Value("${aliyun.oss.accessKeySecret}")
    String accessKeySecret;

    @Bean
    public OSSClient createOssClient() {
        return (OSSClient)new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }
}

其功能是实现图片上传至OSS,其内置操作有兴趣的可以自己看源码

4. 文件上传接口

/**
 * @author hj(BaridHu)
 */

@Slf4j
@Api(value = "file", tags = {"文件控制层"})
@RequestMapping("file")
@RestController
@LoginClassAnnotation
public class FileController {

    @Value("${aliyun.oss.maxSize}")
    private int maxSize;

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

    @Value("${aliyun.oss.dir.prefix}")
    private String dirPrefix;

    @Resource
    private OSSClient ossClient;

    @Resource
    private FileService fileService;

    @ApiOperation(value = "文件上传OSS接口")
    @PostMapping("upload")
    public RestResponse uploadToOSS(@ApiParam(value = "文件名", required = true) @RequestParam("photo") MultipartFile file) {
        String url = "";
        try {
            InputStream inputStream = file.getInputStream();
            String objectName =  getObjectName(file);
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
            url = formatPath(objectName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return RestResponse.ok(url);
    }

    private String getObjectName(MultipartFile file) {
        // 文件后缀
        String suffixName = Objects.requireNonNull(file.getOriginalFilename()).substring(file.getOriginalFilename().lastIndexOf("."));
        String fileName = SpringContextUtils.getContext().getBean(SnowFlakeUtils.class).nextId() + suffixName;
        // 文件类型:1-图片,2-音频,3-视频
        String fileType = FileUtils.getFileType(suffixName);
        // 完整路径
        String objectName = "";
        switch (fileType) {
            case "1":
                objectName = dirPrefix + "images/" + DateUtil.today() + "/" + fileName;
                break;
            case "2":

                objectName = dirPrefix + "audio/" + DateUtil.today() + "/" + fileName;
                break;
            case "3":
                objectName = dirPrefix +"videos/" + DateUtil.today() + "/" + fileName;
                break;
            default:
                break;
        }
        return objectName;
    }

    private String formatPath(String objectName){
        return "https://" + bucketName + "." + ossClient.getEndpoint().getHost() + "/" + objectName;
    }
}

补充1: SpringContextUtils.getContext().getBean(SnowFlakeUtils.class).nextId() 是利用雪花算法生成全局唯一的ID值,源于Twitter,能很好的保证ID值不重复,有兴趣的自己可以研究研究,有时间我也会出一期关于雪花算法的文章,这里大家可以使用UUID来代替

String fileName = UUID.randomUUID().toString() + suffixName;

补充2: FileUtils工具类

/**
 * @author hj(BaridHu)
 */
 
@Component
public class FileUtils {

    public static final String TYPE_JPG = ".jpg";

    public static final String TYPE_GIF = ".gif";

    public static final String TYPE_PNG = ".png";

    public static final String TYPE_BMP = ".bmp";

    public static final String TYPE_MP3 = ".mp3";

    public static final String TYPE_WAV = ".wav";

    public static final String TYPE_M4A = ".m4a";

    public static final String TYPE_MP4 = ".mp4";

    public static final String TYPE_UNKNOWN = "unknown";


    public static boolean delFile(File file) {
        if (file.exists()) {
            String name = file.getName();
            file.delete();
            System.out.println("文件 [" + name + "] 已经删除!");
            return true;
        }
        return false;
    }

    /**
     * 获取文件类型
     * type:1-图片,2-音频,3-视频
     *
     * @return {@link String}
     */
    public static String getFileType(String suffixName) {
        String type = null;
        switch (suffixName) {
            case TYPE_JPG:
            case TYPE_GIF:
            case TYPE_PNG:
            case TYPE_BMP:
                type = "1";
                break;
            case TYPE_MP3:
            case TYPE_WAV:
            case TYPE_M4A:
                type = "2";
                break;
            case TYPE_MP4:
                type = "3";
                break;
            default:
                break;
        }
        return type;
    }

}

4. 使用Swagger测试

使用SpringBoot将图片上传至阿里云OSS
可以看到已经上传至对象存储桶了
使用SpringBoot将图片上传至阿里云OSS如何下载呢?
将返回的URL在浏览器网址输入栏输入就行

这篇文章就先介绍这么多,后面会更新拓展!如果你觉得这篇文章对你有帮助的话,请点赞和收藏哦!如果能点拨小小的关注就更好哦!
使用SpringBoot将图片上传至阿里云OSS文章来源地址https://www.toymoban.com/news/detail-455155.html

到了这里,关于使用SpringBoot将图片上传至阿里云OSS的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue3 - 超详细 “纯前端“ 将文件上传到阿里云 OSS 对象存储,最新阿里云 SDK 上传音频、视频、图片、文档、office 等(保姆级详细示例源码教程,每行代码都有注释小白一看就懂)

    网上的教程大部分都过时了,各种不规范的写法五花八门(各种文件引入关系贼难改),对于新手来说真的无从下手。 本文站在新手的角度, 在 vue3 项目开发中,超详细 “纯前端(无需后端)” 上传各种图片图像、文档、音视频文件、压缩包到阿里云oss存储,利用 SDK 前端

    2024年02月03日
    浏览(52)
  • 阿里云oss对象存储上传照片并返回照片路径

    安装javaJDk 依赖 jdk1.8(只用一个依赖即可) 使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。 程序:

    2024年02月13日
    浏览(39)
  • JAVA通过阿里云OSS存储实现图片上传功能

    首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台 进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹)  关键是要获得下面几个关键的信息,只有拥有这些信息才能连接上这个Bucket进行操作: 添加对应依赖  

    2024年02月05日
    浏览(45)
  • 阿里云对象存储oss-文件上传过程详解(两种方式)

    问题:需要配置系统变量才能够使用 以win11为例 (1)打开设置 (2)选择----系统信息 (3)选择----高级系统设置 (4)选择----环境变量 (5)选择----系统变量这栏-----新建 (6)在“变量名”输入框中输入 OSS_ACCESS_KEY_ID,在“变量值”输入框中输入你的Access Key ID。再次点击“新建”按钮,输入

    2024年02月10日
    浏览(47)
  • 阿里云OSS存储图片在上传的时候设置过期时间

    第一种方法:在上传文件时设置过期时间 在使用 putObject 方法上传文件时,可以通过设置 x-oss-expires 和 x-oss-delete-after 头部来设定文件的过期时间。 以下是示例代码: 上述代码中,我们在 headers 中添加了 x-oss-expires 和 x-oss-delete-after 头部来设定文件的过期时间,其中 x-oss-ex

    2024年02月07日
    浏览(55)
  • Unity 上传文件到阿里云 对象存储OSS服务器

    首先登录阿里云 免费试用–对象存储OSS --点击立即试用,可以有三个月的免费试用 创建Buket 新建AccessKey ,新建完成后,会有一个CSV文件,下载下来,里面有Key ,代码中需要用到 下载SDK 双击打开 sln文件,使用VS打开,右键项目–属性,修改程序集名字,然后点击生成–生成解

    2024年02月13日
    浏览(74)
  • SpringBoot集成-阿里云对象存储OSS

    阿里云对象存储 OSS (Object Storage Service),是一款海量、安全、低成本、高可靠的云存储服务。使用 OSS,你可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 登录阿里云后进入阿里云控制台首页选择 对象存储 OSS 服务 开通服务 创建Bucket 填写

    2024年02月06日
    浏览(50)
  • SpringBoot整合阿里云OSS对象存储

    阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。 阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中。 可以进行

    2024年02月06日
    浏览(54)
  • 【业务功能篇77】微服务-OSS对象存储-上传下载图片

    3. 图片管理 文件存储的几种方式 单体架构可以直接把图片存储在服务器中 但是在分布式环境下面直接存储在WEB服务器中的方式就不可取了,这时我们需要搭建独立的文件存储服务器。 3.1 开通阿里云服务 针对本系统中的相关的文件,图片,文本等统一的交给云服务器管理。

    2024年02月11日
    浏览(52)
  • SpringBoot整合阿里云Oss实现文件图片上传

    目录 1. 阿里云Oss注册使用 2. 项目中使用 2.1 引入依赖以及插件 2.2 编写配置文件application.properties 2.3 创建常量类,获取配置信息  2.4 serviceImpl中实现逻辑            

    2024年02月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包