springboot 集成阿里云 OSS

引入依赖
<!-- 阿里云oss依赖 -->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.9.1</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><groupId>com.orchids</groupId><artifactId>aliyun-oss</artifactId><version>0.0.1-SNAPSHOT</version><name>aliyun-oss</name><description>aliyun-oss</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.7.12</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.1.0</version></dependency><!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.9.1</version></dependency><!-- 日期工具栏依赖 --><dependency><groupId>joda-time</groupId><artifactId>joda-time</artifactId><version>2.10.1</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.orchids.aliyunoss.AliyunOssApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
编写配置文件
server:port: 8080aliyun:endpoint: oss-cn-wuhan-lr.aliyuncs.comaccessKey: your-accessKeysecretKey: your-secretKeybucketname: nullpointer2024
编写配置aliyun配置类
package com.orchids.aliyunoss.aliyun;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;/*** @ Author qwh* @ Date 2024/6/27 14:38*/
@Data
@ConfigurationProperties(prefix = "aliyun")
public class AliyunProperties {private String endpoint;private String accessKey;private String secretKey;private String bucketName;
}
package com.orchids.aliyunoss.aliyun;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ Author qwh* @ Date 2024/6/27 14:39*/
@Configuration
@EnableConfigurationProperties(AliyunProperties.class)
public class AliyunConfiguration {@Autowiredprivate AliyunProperties aliyunProperties;@Beanpublic OSS ossClient(){return new OSSClientBuilder().build(aliyunProperties.getEndpoint(),aliyunProperties.getAccessKey(),aliyunProperties.getSecretKey());}}
编写knife4j配置文件
package com.orchids.aliyunoss.web.config;import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import org.springdoc.core.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @ Author qwh* @ Date 2024/6/27 14:54*/
@Configuration
public class Knife4jConfiguration {@Beanpublic OpenAPI OpenAPI() {return new OpenAPI().info(new Info().title("AliyunOSSAPI").version("1.0").description("UploadAPI"));}@Beanpublic GroupedOpenApi StudentAPI() {return GroupedOpenApi.builder().group("AliyunOssFile管理").pathsToMatch("/aliyun/**").build();}
}
结果返回类
package com.orchids.aliyunoss.model.result;import lombok.Data;/*** @ Author qwh* @ Date 2024/6/27 14:37*/
@Data
public class Result<T>{//返回码private Integer code;//返回消息private String message;//返回数据private T data;public Result() {}private static <T> Result<T> build(T data) {Result<T> result = new Result<>();if (data != null)result.setData(data);return result;}public static <T> Result<T> build(T body, ResultCode resultCodeEnum) {Result<T> result = build(body);result.setCode(resultCodeEnum.getCode());result.setMessage(resultCodeEnum.getMessage());return result;}public static <T> Result<T> ok(T data) {return build(data, ResultCode.SUCCESS);}public static <T> Result<T> ok() {return Result.ok(null);}public static <T> Result<T> fail() {return build(null, ResultCode.FAIL);}
}
controller
package com.orchids.aliyunoss.web.controller;import com.orchids.aliyunoss.model.result.Result;
import com.orchids.aliyunoss.web.service.FileService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;/*** @ Author qwh* @ Date 2024/6/27 15:02*/
@Tag(name = "FileUpload")
@RestController
@RequestMapping("/aliyun")
@AllArgsConstructor
public class FileUploadController {private final FileService fileService;@Operation(summary = "文件上传")@PostMapping("fileload")public Result<String> upload(@RequestParam MultipartFile file) {String url = fileService.upload(file);return Result.ok(url);}
}
service
package com.orchids.aliyunoss.web.service;import org.springframework.web.multipart.MultipartFile;/*** @ Author qwh* @ Date 2024/6/27 14:56*/
public interface FileService {String upload(MultipartFile file);
}
package com.orchids.aliyunoss.web.service.impl;import com.aliyun.oss.OSS;
import com.orchids.aliyunoss.aliyun.AliyunProperties;
import com.orchids.aliyunoss.web.service.FileService;
import lombok.RequiredArgsConstructor;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;/*** @ Author qwh* @ Date 2024/6/27 14:57*/
@Service
@RequiredArgsConstructor
public class FileServiceImpl implements FileService {private final OSS ossClient;private final AliyunProperties aliyunProperties;@Overridepublic String upload(MultipartFile file) {try {// 上传文件流。InputStream inputStream = file.getInputStream();String fileName = file.getOriginalFilename();//生成随机唯一值,使用uuid,添加到文件名称里面String uuid = UUID.randomUUID().toString().replaceAll("-", "");fileName = uuid + fileName;//按照当前日期,创建文件夹,上传到创建文件夹里面//  2021/02/02/01.jpgString timeUrl = new DateTime().toString("yyyy/MM/dd");fileName = timeUrl + "/" + fileName;//调用方法实现上传ossClient.putObject(aliyunProperties.getBucketName(), fileName, inputStream);// 关闭OSSClient。ossClient.shutdown();//上传之后文件路径// https://nullpointer2024.oss-cn-beijing.aliyuncs.com/01.jpgString url = "https://" + aliyunProperties.getBucketName() + "." + aliyunProperties.getEndpoint() + "/" + fileName;//返回return url;} catch (IOException e) {e.printStackTrace();return null;}}
}
test

image.png

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

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

相关文章

技术前瞻:华为鸿蒙HarmonyOS NEXT仓颉语言Beta招募亮点提前曝光

在科技迅猛发展的今天&#xff0c;华为的每一步创新都备受瞩目。6月21日&#xff0c;华为再次引领风潮&#xff0c;正式发布了自研的仓颉编程语言&#xff0c;并宣布开启HarmonyOS NEXT 仓颉语言开发者预览版Beta招募活动。这不仅是华为技术实力的展示&#xff0c;更是对开发者…

C语言基础笔记(全)

一、数据类型 数据的输入输出 1.数据类型 常量变量 1.1 数据类型 1.2 常量 程序运行中值不发生变化的量&#xff0c;常量又可分为整型、实型(也称浮点型)、字符型和字符串型 1.3 变量 变量代表内存中具有特定属性的存储单元&#xff0c;用来存放数据&#xff0c;即变量的值&a…

day53--ELK搜索

ELK搜索高级课程 1&#xff0e; 课程简介 1.1 课程内容 ELK是包含但不限于Elasticsearch&#xff08;简称es&#xff09;、Logstash、Kibana 三个开源软件的组成的一个整体。这三个软件合成ELK。是用于数据抽取&#xff08;Logstash&#xff09;、搜索分析&#xff08;Elast…

学习笔记——动态路由——OSPF(报头信息、报文信息、三张表)

六、OSPF协议的报头信息、报文信息、三张表 OSPF的协议报文在一个广播域内进行传递&#xff0c;是直接封装在IP报文中的&#xff0c;协议号为89。 OSPF本身5种类型&#xff1a;分别是Hello报文、DD报文、LSR报文、LSU报文、LSAck报文&#xff0c;各种不同类型的LSA其实只是包含…

Acitity跳转延时10s会导致anr的时序问题讨论

背景&#xff1a; 针对前些天直播时候&#xff0c;主要讲解是launcher启动app&#xff0c;Activity onResume延时10s不会anr&#xff0c;但是Activity内部activity1跳转activity2就会anr问题展开了讨论 https://mp.weixin.qq.com/s/_uA5yKUTUw-9H-tWxGNK9g 这个原因为啥已经在…

『Z-Workshop』 6月22日线下ALCOVE分享活动

2024 求是创新 ZJUBCA Sponsored by the ALCOVE Community TIME&#xff1a;2024/06/22 ADD&#xff1a;浙江大学紫金港校区 --- Alcove 是 Aptos 公链与 Alibaba Cloud 共同打造的亚洲首个 Move 开发者社区&#xff0c;致力于支持开发者使用 Move 语言构建下一代 Web3 应用&am…

综合管廊挂轨巡检机器人:安全高效管理的新力量

综合管廊、电力管廊等作为承载着各类电缆和管线的重要通道&#xff0c;管廊的安全和可靠性对城市的运行至关重要。传统人工巡检效率低、劳动强度大&#xff0c;且可能存在巡检不及时、不准确等问题。难以满足日益复杂和庞大的管廊系统的监控需求。为了解决这些问题&#xff0c;…

RabbitMQ基本概念

RabbitMQ是AMQP协议的一个开源实现&#xff0c;所以其基本概念也就是的 AMQP 协 议中的基本概念。如图3-1所示是 RabbitMQ 的整体架构图。 Message(消息):消息是不具名的&#xff0c;它由消息头和消息体组成。消息体是不透明的&#xff0c; 而消息头则由一系列可选属性组成&…

vue3中的图片懒加载指令及全局注册

vue3中的图片懒加载指令及全局注册 最近重新刷了一遍黑马的小兔鲜前端项目&#xff0c;发现有个懒加载的指令之前还没有用过。而且写法相对固定&#xff0c;因此记录一下 首先&#xff0c;懒加载&#xff08;Lazy Loading&#xff09;的作用是延迟加载某些资源或组件&#xf…

用免费的“山水博客”来管理你的离线文章

山水博客地址&#xff1a; https://github.com/opensanyue/ssblog 电脑上存了不博客文章&#xff0c;一直想找个软件整理一下。前不久在github刷到一个&#xff0c;试了一下&#xff0c;还不错&#xff0c;先看看成果。 左边我建了2个大类&#xff0c;分开用来放“csdn”和“简…

文物管理技术RFID技术

随着科技的不断发展&#xff0c;科技在各个领域都发挥着重要的作用。其中&#xff0c;在文物管理方面&#xff0c;RFID技术的应用正在逐渐引起人们的关注。RFID&#xff08;Radio Frequency Identification&#xff09;技术是一种通过无线电信号进行非接触式识别的技术&#xf…

docker curl:(56) Recv failure: Connection reset by peer

docker容器启动后&#xff0c;查看日志未发现错误&#xff0c;通过查询和分析&#xff0c;发现是期望容器打开的端口与容器实际打开的端口不一致导致。 1&#xff09;docker run -itd -p 8082:8082 vulfocus/log4j2-rce-2021-12-09:latest 2&#xff09;curl localhost:8082 …

java基于ssm+jsp 大学生校园兼职系统

1前台首页功能模块 大学生校园兼职系统&#xff0c;在大学生校园兼职系统可以查看首页、企业信息、招聘信息、论坛信息、留言反馈、我的、跳转到后台等内容&#xff0c;如图1所示。 图1系统首页界面图 学生登录&#xff0c;通过学生登录填写账号、密码等信息进行登录操作&…

OSM数据导入至PostgreSQL

好几年没写博客了&#xff0c;最近博士小论文扩展准备添加个路网数据增加定位准确性 用的读取代码是github上的代码&#xff0c;使用openstreet数据。 1&#xff0c;从BBBbike划定区域下载路网数据&#xff0c;BBBike extracts OpenStreetMap (OSM, Garmin, Shapefile etc.) …

【Proteus仿真】基于stm32的数码管时钟

【Proteus仿真】基于stm32的数码管时钟 Proteus仿真&#xff01;基于stm32的数码管时钟~_哔哩哔哩_bilibili ‍ 01原理图 ​​ 02功能描述 1.通过按键修改时间 2.数码管显示实时时间&#xff0c;时-分-秒-毫秒格式 03获取方式 https://docs.qq.com/sheet/DTExIc2dPUUJ…

启动台出现agent app的解决方法~

启动台出现agent app的解决方法&#xff5e; 如果用了战网&#xff0c;Battle.net&#xff0c;在卸载后有一个agent app&#xff0c;启动台删除不掉&#xff0c;应用程序里面没有&#xff0c;怎么办呢&#xff1f; 解决方法&#xff1a;找到这个app所在位置&#xff0c;可以通…

05 Shell编程之免交互

1、Here Document免交互 1.1 Here Document概述 Here Document是一个特殊用途的代码块&#xff0c;它是标准输入的一种替代品&#xff0c; 可以帮助脚本开发人员不必使用临时文件来构建输入信息&#xff0c;而是直接就地生产出一个文件并用作命令的标准输入。 Here Documen…

vue-主题切换

themeName/index.vue页面: <template><div class"theme-view"><div click"themeClick" class"theme-btn">切换颜色</div><br>{{themeName white ? 白色 : 深色}}主题页面</div> </template><sc…

po文件并转换成mo文件

po文件转换成mo文件 简介 .po和.mo文件是WordPress中语言相关的两种文件。po 是Portable Object(可移植对象)的缩写&#xff0c;存放待翻译的字符串信息&#xff0c;可直接用文本编辑器打开编辑&#xff1b;mo 是Machine Object的缩写&#xff0c;二进制文件&#xff0c;程序…

1.3.1 离散周期信号DFS

目录 离散周期序列的DFS表示 离散周期信号DFS的性质 线性特性 位移特性 对称特性 奇偶对称 共轭反转对称 实序列的对称特性 周期卷积 DFS——Discrete Fourier Series 傅里叶级数 离散周期序列的DFS表示 做题得到的小公式 离散周期信号DFS的性质 线性特性 位…