SpringBoot整合阿里云OSS,实现图片上传

news2024/11/17 13:41:56

在项目中,将图片等文件资源上传到阿里云的OSS,减少服务器压力。

  1. 项目中导入阿里云的SDK
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>
  1. 为自己的OSS创建访问的AccessKey,有了AccessKey程序就可以访问账户资源的API了。


    这就是AccessKey

然后将AcessKey的key和secret、OSS的区域节点以及bucket名称配置到配置文件中,

alioss:
  accessKeyId: LTAI5xxxxxxxxxxxxFUDMoy
  accessKeySecret: KxxxxxxxxxxxxxxxxxI
  endpoint: oss-cn-qingdao.aliyuncs.com
  bucketName: kkbank
  1. 封装工具类,去读取配置文件中的AccessKey、endpoint、bucketName,注意配置文件中的名称要与属性名保持一致,负责无法为属性赋值。

@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "alioss") // 配置文件中,配置信息的前缀
public class AliOssUtil {

    private String endpoint;    // 区域
    private String accessKeyId; // key
    private String accessKeySecret; // secret
    private String bucketName;  // bucket名称

    /**
     * 文件上传
     * 需要获取阿里云OSS中 AccessKey和 bucket所在的区域
     * @param fileName
     * @param inputStream
     * @return
     */
    public String upload(String fileName, InputStream inputStream) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 文件在OSS中存储的路径,此处使用日期 + 当前的毫秒数 + 文件名称 来作为文件名,防止文件重名
        String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())
                + "/" + System.currentTimeMillis() +"-"+fileName;
        try {
            //解决图片预览问题(默认是下载)
            ObjectMetadata metadata = new ObjectMetadata();
            // 获取文件类型
            metadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));

            // 创建PutObject请求,开始传输文件
            ossClient.putObject(bucketName, objectName, inputStream,metadata);
        } catch (OSSException oe) {
            System.out.println("Error Message:" + oe.getErrorMessage());
        } catch (ClientException ce) {
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                // 释放连接
                ossClient.shutdown();
            }
        }
        // 此时,文件上传完成,应该立即预览
        //文件访问路径规则 https://BucketName.Endpoint/ObjectName
        StringBuilder stringBuilder = new StringBuilder("https://");
        stringBuilder
                .append(bucketName)
                .append(".")
                .append(endpoint)
                .append("/")
                .append(objectName);

        log.info("文件上传到:{}", stringBuilder.toString());
        // 返回图片的外网访问url
        return stringBuilder.toString();
    }

    /**
     * 根据文件名称后缀,设置MIME类型,此处仅设置图片类型
     * @param filenameExtension 文件名称后缀
     * @return
     */
    private String getContentType(String filenameExtension) {
        if (filenameExtension.equalsIgnoreCase(".bmp")) {
            return "image/bmp";
        }
        if (filenameExtension.equalsIgnoreCase(".gif")) {
            return "image/gif";
        }
        if (filenameExtension.equalsIgnoreCase(".jpeg") ||
                filenameExtension.equalsIgnoreCase(".jpg") ||
                filenameExtension.equalsIgnoreCase(".png")) {
            return "image/jpg";
        }
        return "image/jpg";
    }
}
  1. 在需要的地方调用即可,利用SpringMVC中的MultiPartFile来接受文件流。
@RestController
@RequestMapping("/admin/common")
@Slf4j
public class CommonController {

    @Autowired
    private AliOssUtil aliOssUtil;

    //文件上传
    @PostMapping("/upload")
    public Result upload(MultipartFile file) throws IOException {
        String path = aliOssUtil.upload(file.getOriginalFilename(), file.getInputStream());
        log.info("图片上传之后的访问路径是{}", path);
        return Result.success(path);// 返回文件在网络中的url
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1985-2021年30m全国逐年土地覆被数据(含分省数据)

1.研究背景 2022年8月,武汉大学杨杰和黄昕教授团队向公众发布了CLCD 2021年全国土地覆数据。 中国在过去几十年中经济和人口迅速发展,土地覆盖随之发生巨大变化,因此迫切需要对其进行连续和精细的监测。然而,由于缺乏足够的训练样本和计算能力,基于卫星遥感观测数据的中国…

问道管理股市资讯:影视股集体走高,暑期档票房持续破纪录

影视股24日盘中集体走高&#xff0c;截至发稿&#xff0c;幸福蓝海、金逸影视涨停&#xff0c;上海电影、横店影视涨约8%&#xff0c;百纳千成、光线传媒涨约5%&#xff0c;中国电影、唐德影视、华谊兄弟等涨超3%。 上海问道私募基金管理有限公司&#xff08;百度一下问道管理&…

完成出版工作

书籍完成出版&#xff0c;正式上线售卖。若有需要&#xff0c;可在淘宝&#xff0c;当当&#xff0c;京东这些平台上都可以搜索到&#xff0c;书名是《多智能体机器人系统控制及其应用》&#xff0c;提前感谢&#xff0c;封面如下。 至于本专栏&#xff0c;留作大家讨论和书籍…

当一个程序员决定穿上粉色裤子

作为一个大众眼中的“非典型程序员”&#xff0c;我喜欢拥抱时尚和潮流&#xff0c;比如我经常在演讲时穿粉色裤子&#xff0c;这甚至已经成为一个标志性打扮。某天又逢主题演讲日&#xff0c;我站在衣柜前挑选上衣的时候&#xff0c;忽然灵光乍现&#xff1a;有没有可能借助 M…

基于jenkins自动化部署PHP环境

实验环境 操作系统 IP地址 主机名 角色 CentOS7.5 192.168.147.141 git git服务器 CentOS7.5 192.168.147.142 Jenkins git客户端 jenkins服务器 CentOS7.5 192.168.147.143 web web服务器 具体环境配置见上一篇&#xff01; 准备git仓库 [rootgit ~]# su -…

如何写好公文材料

写好公文材料需要具备一定的写作技巧&#xff0c;同时也需要对公文的格式、语言和结构有深入的了解。以下是如何写好公文材料的建议和步骤&#xff1a; 1.确定公文的目的 在开始写作前&#xff0c;明确公文的目的。它是为了传达什么样的信息&#xff1f;是通知、申请、报告、建…

专题-【十字链表】

有向图的十字链表表示法&#xff1a;

U盘文件恢复,拯救文件,只需简单3招!

“u盘文件删掉了还能恢复吗&#xff1f;七夕和对象吵架了&#xff0c;一气之下把之前一起旅游的照片视频都删了&#xff0c;今天看到空空的u盘&#xff0c;心里真的很难受。有什么方法可以恢复u盘文件吗&#xff1f;” U盘在我们的日常生活中已经扮演了很重要的角色&#xff0c…

TC1016-同星4路CAN(FD),2路LIN转USB接口卡

TC1016是同星智能推出的一款多通道CAN&#xff08;FD&#xff09;和LIN总线接口设备&#xff0c;CANFD总线速率最高支持8M bps&#xff0c;LIN支持速率0~20K bps&#xff0c;产品采用高速USB2.0接口与PC连接&#xff0c;Windows系统免驱设计使得设备具备极佳的系统兼容性。 支…

【附安装】R语言4.3.0安装教程

软件下载 软件&#xff1a;R语言版本&#xff1a;4.3.0语言&#xff1a;简体中文大小&#xff1a;77.74M安装环境&#xff1a;Win7及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;h…

android Junit4编写自测用例

10多年的android开发经验&#xff0c;一直以来呢&#xff0c;也没有使用过android自带的测试代码编写。说来也惭愧。今天也花了点时间稍微研究了下。还挺简单。接下来就简单的说一下。 新建工程 直接默认新建一个工程&#xff0c;就会有两个目录androidTest和test(unitTest)两…

漏洞复现 || muhttpd 任意文件读取

漏洞描述 muhttpd&#xff08;mu-HTTP-deamon&#xff09;是一个简单但完整的web服务器&#xff0c;用可移植的ANSI C编写。它支持静态页面、CGI脚本、基于MIME类型的处理程序和HTTPS&#xff0c;muhttpd 1.1.7之前版本存在安全漏洞。攻击者利用该漏洞读取系统任意文件。 免责…

免费制作高质量的电子期刊网站

工具介绍&#xff1a;FLBOOK 打开FLBOOK首页就能看见有四五本高质量的电子书刊&#xff0c;并且每打开一本&#xff0c;书的最下方就有阅读次数的统计。 FLBOOK制作电子期刊的方法也非常简单&#xff0c;可以根据小编的步骤开始制作或是看FLBOOK的教程&#xff0c;亲自动手制作…

第一讲使用IDEA创建Java工程——HelloWorld

一、前言导读 为了能够让初学者更快上手Java,不会像其他书籍或者视频一样,介绍一大堆历史背景,默认大家已经知道Java这么编程语言了。本专栏只会讲解干货,直接从HelloWord入手,慢慢由浅入深,讲个各个知识点,这些知识点也是目前工作中项目使用的,而不是讲一些老的知识点…

Tuxera NTFS2023中文版Mac读写NTFS格式硬盘访问、编辑、存储和传输文件工具

因为Mac电脑不能写入NTFS格式磁盘&#xff0c;但是多数用户使用的是NTFS格式的移动硬盘、u盘&#xff0c;因此很多NTFS for Mac软件应运而生。但是市面上很多NTFS for Mac软件很多&#xff0c;例如&#xff1a;Tuxera NTFS for Mac、Paragon NTFS for Mac等。Tuxera NTFS for M…

【分析绘图】R语言实现一些常见的绘图

微生信-在线绘图网站 线性图 library(ggplot2)x <- rnorm(100, 14, 5) # rnorm(n, mean 0, sd 1) y <- x rnorm(100, 0, 1) ggplot(data NULL, aes(x x, y y)) # 开始绘图geom_point(color "darkred") # 添加点annotate("text",x 13,…

Java面试题—2023年8月24日—YDZH

2023-08-24 10:54:28 北京 yī do zh h 答案仅供参考&#xff0c;博主仅记录发表&#xff0c;没有实际查询&#xff0c;不保证正确性。 面试题&#xff1a; 1、请你谈谈关于 Synchronized 和 lock ? 2、请简单描述一下类的加载过程?类加载器有几个种&#xff0c;分别作用是什…

微信小程序开发项目步骤【详细】

在平常是H5开发中已经不能满足我们的需求了&#xff0c;随着小程序的火热&#xff0c;越来越多的项目开发也离不开小程序的运用&#xff0c;目前常用的就是微信小程序&#xff0c;我们学完微信小程序后其他的小程序开发也是基本一样的&#xff0c;也为后面的uniapp开发做下一定…

港联证券|油价上涨对股票影响大吗?利好还是利空?

石油是现代国家国民经济的血脉&#xff0c;直接影响国民经济的发展。那么&#xff0c;油价上涨对股票影响大吗&#xff1f;利好仍是利空&#xff1f;为大家准备了相关内容&#xff0c;以供参阅。 香港港联证券有限公司&#xff08;百度一下港联证券&#xff09;成立于2021年1月…

vue 简单实验 v-model 变量和htm值双向绑定

1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"two-way-binding"><p>{{ message }}</p><input v-model"message" /> </div> <script>…