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

【阿里OSS文件上传】SpringBoot实现阿里OSS对象上传

1. YAML配置阿里OSS属性

  alioss:endpoint: oss-cn-beijing.aliyuncs.comaccess-key-id: L***eaccess-key-secret: j***Xbucket-name: c***i

2. 设置对象保存OSS属性

注册为Component方便后续直接调用。

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "alioss")
@Data
public class AliOssProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;}

3. 阿里OSS文件上传工具类Util

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.io.ByteArrayInputStream;@Data
@AllArgsConstructor
@Slf4j
public class AliOssUtil {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;/*** 文件上传** @param bytes* @param objectName* @return*/public String upload(byte[] bytes, String objectName) {// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);try {// 创建PutObject请求。ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(bytes));} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (ClientException ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");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());return stringBuilder.toString();}
}

4. 将工具类配置为Bean,并填充OSS属性

import com.sky.properties.AliOssProperties;
import com.sky.utils.AliOssUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@Slf4j
public class OssConfiguration {@Bean// 确保只会有一个Bean@ConditionalOnMissingBeanpublic AliOssUtil aliOssUtil(AliOssProperties aliOssProperties) {log.info("注册阿里OSSBean");return new AliOssUtil(aliOssProperties.getEndpoint(), aliOssProperties.getAccessKeyId(), aliOssProperties.getAccessKeySecret(), aliOssProperties.getBucketName());}
}

5. 使用

import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.sky.result.Result;
import com.sky.utils.AliOssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.UUID;@RestController
@RequestMapping("/admin/common")
@Api(tags = "通用接口")
@Slf4j
public class CommonController {@ResourceAliOssUtil aliOssUtil;@PostMapping("/upload")@ApiOperation("上传文件")public Result<String> upload(MultipartFile file) {try {String originalFilename = file.getOriginalFilename();String extension = originalFilename.substring(originalFilename.lastIndexOf("."));String fileURL = aliOssUtil.upload(file.getBytes(), UUID.randomUUID().toString() + extension);return Result.success(fileURL);} catch (IOException e) {throw new RuntimeException(e);}}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Vite】快速入门及其配置
  • WPF中UI元素继承关系
  • python os库使用教程
  • 【源码阅读】Sony的go breaker熔断器源码探究
  • C2W1.Assignment.Parts-of-Speech Tagging (POS).Part2
  • 算法日记day 15(二叉树的遍历)
  • 【Qt】QWidget核心属性相关API
  • 新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?
  • 深入浅出mediasoup—通信框架
  • 【BUG】已解决:ModuleNotFoundError: No module named ‘paddle‘
  • 【云原生】Kubernetes微服务Istio:介绍、原理、应用及实战案例
  • uniapp vue3 上传视频组件封装
  • 【ffmpeg命令】RTMP推流
  • 主流微调训练方法总结 LoRA、Adapter、Prefix-tuning、P-tuning、Prompt-tuning
  • 天途无人机林业应用解决方案
  • (三)从jvm层面了解线程的启动和停止
  • AngularJS指令开发(1)——参数详解
  • CSS实用技巧
  • css系列之关于字体的事
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • ERLANG 网工修炼笔记 ---- UDP
  • es6
  • Java Agent 学习笔记
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • java正则表式的使用
  • LintCode 31. partitionArray 数组划分
  • Linux Process Manage
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前言-如何学习区块链
  • 强力优化Rancher k8s中国区的使用体验
  • 使用 @font-face
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 小程序01:wepy框架整合iview webapp UI
  • 异步
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • (二) 初入MySQL 【数据库管理】
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (利用IDEA+Maven)定制属于自己的jar包
  • (三)Honghu Cloud云架构一定时调度平台
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)linux下的时间函数使用
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • ***监测系统的构建(chkrootkit )
  • **python多态
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .NET CLR Hosting 简介
  • .net dataexcel winform控件 更新 日志
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @Controller和@RestController的区别?
  • [ C++ ] STL---string类的使用指南