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

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

在项目中,将图片等文件资源上传到阿里云的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: LTAI5xxxxxxxxxxxxFUDMoyaccessKeySecret: KxxxxxxxxxxxxxxxxxIendpoint: oss-cn-qingdao.aliyuncs.combucketName: kkbank
  1. 封装工具类,去读取配置文件中的AccessKey、endpoint、bucketName,注意配置文件中的名称要与属性名保持一致,负责无法为属性赋值。

@Data
@Slf4j
@Component
@ConfigurationProperties(prefix = "alioss") // 配置文件中,配置信息的前缀
public class AliOssUtil {private String endpoint;    // 区域private String accessKeyId; // keyprivate String accessKeySecret; // secretprivate 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/ObjectNameStringBuilder stringBuilder = new StringBuilder("https://");stringBuilder.append(bucketName).append(".").append(endpoint).append("/").append(objectName);log.info("文件上传到:{}", stringBuilder.toString());// 返回图片的外网访问urlreturn 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 {@Autowiredprivate 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.lryc.cn/news/138062.html

相关文章:

  • Dynaminc Programming相关
  • 使用 Elasticsearch 轻松进行中文文本分类
  • MNN学习笔记(八):使用MNN推理Mediapipe模型
  • 主力吸筹指标及其分析和使用说明
  • Python高光谱遥感数据处理与高光谱遥感机器学习方法教程
  • 【洛谷】P1678 烦恼的高考志愿
  • 开机自启CPU设置定频
  • 嵌入式Linux开发实操(十二):PWM接口开发
  • 消息中间件介绍
  • [Unity] 基础的编程思想, 组件式开发
  • SVN 项目管理笔记
  • Android获取手机已安装应用列表JAVA实现
  • 【校招VIP】有一个比赛获奖项目和参与的开源小项目,秋招项目竞争力够不够?三个标准,自己都可以估算
  • 量化开发学习入门-概念篇
  • 【草稿】关于文本句子分割(中文+英文)以及向量处理
  • 【瑞吉外卖】所遇问题及解决方法
  • 【Hugo入门】基础用法
  • Java实现一个简单的图书管理系统(内有源码)
  • 网络安全等级保护2.0
  • 【sql】MongoDB 增删改查 高级用法
  • 怎么做才能有效更新和优化产品手册文档
  • #P0867. 小武老师的烤全羊
  • 视频汇聚/视频云存储/视频监控管理平台EasyCVR提升网络稳定小tips来啦!
  • C 语言学习
  • TCP网络连接异常情况的处理
  • 单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.10语句
  • Windows 通过服务名称搜索软件启动路径启动软件
  • 如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格
  • Java如何调用接口API并返回数据(两种方法)
  • 极狐GitLab 价值流管理之「总时间图」使用指南