当前位置: 首页 > news >正文

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

相关文章:

  • 41、web基础和http协议
  • SpringMVC系列二: 请求方式介绍
  • 电脑系统重装怎么操作?分享四个win10重装系统方法
  • 更改ip后还被封是ip质量的原因吗?
  • DDei在线设计器-API-DDeiSheet
  • Discuz动漫二次元风格网站模板
  • [经验] candy是什么意思英语翻译 #笔记#其他#职场发展
  • AIGC发展方向和前景
  • 晨持绪科技:开好一家抖音小店运营怎么做
  • 未来几年大多数人会面临的困境
  • 软件工程考试题备考
  • 应用分发也叫APP分发
  • mysql 查询排名,包括并列排名和连续排名
  • 阿里云PAI大模型评测最佳实践
  • 同三维T80002JEHV H.265高清解码器
  • @jsonView过滤属性
  • CSS 三角实现
  • CSS魔法堂:Absolute Positioning就这个样
  • Laravel 实践之路: 数据库迁移与数据填充
  • MQ框架的比较
  • PhantomJS 安装
  • Python_网络编程
  • vuex 笔记整理
  • 如何实现 font-size 的响应式
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 我是如何设计 Upload 上传组件的
  • 小试R空间处理新库sf
  • 阿里云重庆大学大数据训练营落地分享
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #Lua:Lua调用C++生成的DLL库
  • #QT(串口助手-界面)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (附源码)ssm码农论坛 毕业设计 231126
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (转)fock函数详解
  • (转)linux 命令大全
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • (轉貼) UML中文FAQ (OO) (UML)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net refrector
  • .Net 基于MiniExcel的导入功能接口示例
  • .net通用权限框架B/S (三)--MODEL层(2)
  • @RestController注解的使用
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [Android]一个简单使用Handler做Timer的例子
  • [ARM]ldr 和 adr 伪指令的区别
  • [BJDCTF2020]The mystery of ip
  • [C/C++]数据结构 栈和队列()
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • [HCTF 2018]WarmUp (代码审计)
  • [iOS]Win8下iTunes无法连接iPhone版本的解决方法
  • [LeetCode] 178. 分数排名