文件上传-第三方服务阿里云OSS

JAVA后端实现文件上传,比如图片上床功能,有很多实现方案,可以将图片保存到服务器的硬盘上。也可以建立分布式集群,专门的微服务来存储文件常见的技术比如Minio。对于中小型公司,并且上传文件私密性不高的话可以使用第三方的存储服务,比如阿里云、华为云等。

阿里云官网地址:对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务,提供 99.995 % 的服务可用性和多种存储类型,适用于数据湖存储,数据迁移,企业数据管理,数据处理等多种场景,可对接多种计算分析平台,直接进行数据处理与分析,打破数据孤岛,优化存储成本,提升业务价值。icon-default.png?t=N7T8https://www.aliyun.com/product/oss

一般入手第三方服务的学习,不要通读文档,可从官方的快速入门入手。将快速入门的代码粘一粘,看看哪些参数不应该写死应该抽取成工具类,哪些代码是核心的哪些代码可以省略,debug跑一下看看各个变量的值都是什么干什么用的

利用阿里云OSS来存储文件,首先要在管理控制台上Bucket列表中建立自己的存储空间Bucket,填写好自己的Bucjet名称、地域等信息。并且创建好AccessKey秘钥的id和密码,后续需要将Bucjet名称、地域、AccessKey秘钥的id和密码的信息写到配置yml文件中,在将其注入到SpringIOC容器中。

使用阿里云,Java代码编写前,pom.xml中导入aliyun-sdk-oss和aliyun-java-sdk-core依赖。

代码的核心就是通过区域、密匙等信息创建ossClinet客户端,上传文件根据储存地址转成输入流inputstream,调用ossClient.putObject方法,传入参数Bucket桶的名称、图片上传后的名称、图片输入流,就可完成图片上传功能

这种像图片上传的共用的功能,我们会抽取为工具类,供大家使用。

Bucjet名称、地域、AccessKey秘钥的id和密码等信息为方便后续修改,应将其写到配置文件中,通过创建配置类将其读取,在工具类中将其注入并通过@Import注解将其放到IOC容器中。

oss:key: 密匙idsecret: 密匙密码,都为自己创建的,在官网创建时记得保存endpoint: oss-cn-beijing.aliyuncs.com 区域地址,上述为北京区域bucket: 桶名字
@Data
@NoArgsConstructor
@AllArgsConstructor
@ConfigurationProperties(prefix = "oss")//读取配置信息
public class OssProperties {private String key; //密匙idprivate String secret;//秘钥密码private String endpoint;//区域地址private String bucket;//桶名
}

一般都可以用@ConfigurationProperties这个注解来读取配置文件中的信息,使用@Value配合EL表达式也可做到读取配置文件中的信息,但是上述更为常见简单。

紧接着抽取工具类即可,工具类中注入OssProperties对象,上标注@Component与
@Import(OssProperties.class)注解

//阿里存储工具类
@Component
@Import(OssProperties.class)//导入,相当于将OssProperties对象放入容器
public class OssTemplate {@Autowiredprivate OssProperties ossProperties;//文件上传public String upload(String fileName, InputStream inputStream) {//根据上面叙述的参数创建客户端OSS ossClient = new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getKey(), ossProperties.getSecret());//设置最终存储文件的路径和名称,自定义的,根据项目要求定义String objectName = "images/" + new SimpleDateFormat("yyyy/MM/dd").format(new Date())+ "/" + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."));//meta设置请求头,解决访问图片地址直接下载ObjectMetadata meta = new ObjectMetadata();meta.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));//上传ossClient.putObject(ossProperties.getBucket(), objectName, inputStream, meta);//关闭客户端ossClient.shutdown();//可通过下述地址访问到图片,可将地址存储到数据库中return "https://" + ossProperties.getBucket() + "." + ossProperties.getEndpoint() + "/" + objectName;}//文件后缀处理,比如文件叫1.jpg,下述方法抽取取得就是.jpgprivate 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";}
}

官网快速入门中的截图:

图片上传大小默认是1M,太小了,需要修改,需修改配置文件

spring:servlet:multipart:max-request-size: 100MB # 最大请求文件大小,默认10MBmax-file-size: 10MB # 单个请求文件大小,默认1MB

最后在应用代码中,写在controller层就可不必非写到service层,调用抽取的工具类ossTemplate.upload方法就可,注意参数接收文件类型为MultipartFile。

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

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

相关文章

Mysql中关于on,in,as,where的区别

目录 Mysql on,in,as,where的区别 Mysql语句问题解决 1、left join数据筛选问题 2、相同数据重复筛选使用问题 3、根据某个字段排序取每个类别最后三条数据或前三条数据 4、业务逻辑书写位置问题 5、查找另一表内和本表相关字段的数量 6、关于union的使用 7、limit的巧…

波奇学Linux:文件缓冲区

问题导入 文件流输出直接向显示器和重定向文件有不一样的表现 分别向显示器文件输出四个语句,最后fork创建子进程。 当程序运行时和程序重定向到文件中,输出的内容不一样。 重定向时c库函数(printf,fprintf,fwrite)调用了两次&…

掌握C语言文件操作:从入门到精通的完整指南!

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C语言学习 贝蒂的主页:Betty‘s blog 1. 什么是文件 文件其实是指一组相关数据的有序集合。这个数据集有一个名称&a…

第12讲创建图文投票实现

创建图文投票实现 图文投票和文字投票基本一样&#xff0c;就是在投票选项里面&#xff0c;多了一个选项图片&#xff1b; <view class"option_item" v-for"(item,index) in options" :key"item.id"><view class"option_input&qu…

《金融人工智能:用python实现ai量化交易》

融合了数学、python、深度学习以及金融知识&#xff0c;是本推荐的好书。请收藏本文&#xff0c;读后再给大学总结。

在Meteor Lake平台上使用NPU进行AI推理加速

在Meteor Lake平台上&#xff0c;英特尔通过神经处理单元 (NPU) 将人工智能直接融入芯片中&#xff0c;实现桌面电脑平台的AI推理功能。神经处理单元 (NPU) 是一种专用人工智能引擎&#xff0c;专为运行持续的人工智能推理工作负载而设计。与即将推出的支持深度人工智能集成的 …

Java+SpringBoot构建智能捐赠管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Java学习18-- Override方法重写【★】

重点&#xff1a;super类 & 方法重写 ★看不明白多看几遍&#xff0c;记住static优先级>>高于override 重写Override methods★ 重写Override&#xff1a;child class可以覆盖father class中的method&#xff0c;即子类child class和父类father class有相同名称、…

Git简单了解

文章目录 1、Git概述2、Git下载与安装3、Git代码托管服务3.1、使用码云托管服务 1、Git概述 什么是Git Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使…

python+vue+django体育场地器材预约管理系统dyn9h

技术栈 后端&#xff1a;python 前端&#xff1a;vue.jselementui 框架&#xff1a;django Python版本&#xff1a;python3.7 数据库&#xff1a;mysql5.7 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm .体育馆管理系统有管理员和用户两个角色。用户功能有场地…

springboot742餐厅点餐系统

springboot742餐厅点餐系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

面试前的准备

面试前的准备 Java程序员校招与社招的区别 校招和社招都是企业招聘形式的一种&#xff0c;只是面向的对象不同。校招 只允许在校生参加&#xff0c;社招理论上是任何人都能参加的(包括在校生)。 但是&#xff0c;无论是社招还是校招&#xff0c;它的难度都取决于你的水平高低。…

区块链技术与应用 【全国职业院校技能大赛国赛题目解析】第二套区块链系统部署与运维

第二套区块链系统部署与运维题目 环境 : ubuntu20 fisco : 2.8.0 docker: 20.10.21 webase-deploy : 1.5.5 mysql: 8.0.34 子任务1-2-1: 搭建区块链系统并验证(4分) 使用build_chain.sh 脚本文件进行搭建区块链 ,要求: 四节点,默认配置,单机,docker root@192-168-19…

STM32—DHT11温湿度传感器

文章目录 一.温湿度原理1.1 时序图 二.代码 一.温湿度原理 1.1 时序图 (1).下图一是DHT11总的时序图。 (2).图二对应图一的左边黑色部分&#xff0c;图三对应图一的绿色部分&#xff0c;图四的左部分图对应图一的红色部分&#xff0c;图四的右部分对应图一的黄色部分。 (3)…

【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;底层原理高级进阶》 &#x1f680…

内网穿透 | 推荐两个免费的内网穿透工具

目录 1、简介 2、Ngrok 2.1、下载安装 2.2、运行 2.3、固定域名 2.4、配置多服务 3、cpolar 3.1、下载安装 3.2、运行 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应…

CSRNET图像修复,DNN

CSRNET图像修复 CSRNET图像修复&#xff0c;只需要OPENCV的DNN

FastAI 之书(面向程序员的 FastAI)(三)

原文&#xff1a;www.bookstack.cn/read/th-fastai-book 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第五章&#xff1a;图像分类 原文&#xff1a;www.bookstack.cn/read/th-fastai-book/0661b9d7375f45ab.md 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4…

JAVA-多进程开发-创建等待进程

前言 在项目中&#xff0c;为了实现“并发编程”&#xff08;同时执行多个任务&#xff09;&#xff0c;就引入了“多进程编程”&#xff0c;把一个很大的任务&#xff0c;拆分成若干个很小的任务&#xff0c;创建多个进程&#xff0c;每个进程分别负责其中的一部分任务。 这也…

Qt QWidget以及各种控件、布局 核心属性(适合入门使用时查询)

目录 1. QWidget核心属性 2. 按钮类控件 2.1 PushButton 核心属性 2.2 RadioButton 核心属性 2.3 CheckBox 和 Tool Button 核心属性 3. 显示类控件 3.1 Label 核心属性 3.2 LCDNumber 核心属性 3.3 ProgressBar 核心属性 3.4 Calendar Widget 核心属性 4. 输入类控…