1. 第一步:编写OSS的工具类

点击查看代码
aliyun:
oss:
keyid: 填写自己的
keysecret: 填写自己的
endpoint: 填写自己的
bucketname: 填写自己的
@Component
public class OSSUtils { public String urlOSS(MultipartFile img){
//地域节点 --- id --- 密钥 --- 存储筒名称
String endpoint = AliYunOssClient.END_POINT;
String accessKeyId = AliYunOssClient.KEY_ID;
String accessKeySecret = AliYunOssClient.KEY_SECRET;
String bucketName = AliYunOssClient.BUCKET_NAME; try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
//获取文件上传的输入流
InputStream inputStream = img.getInputStream();
//获取文件名称
String Filename = img.getOriginalFilename();
/**
* 1.解决上传同一文件而被新上传的覆盖,使用uuid进行拼接文件名使文件名唯一
* 2.解决上传文件分类问题,根据时间进行分类
*/
// 将uuid 转为string 并且把-去除
String uuid = UUID.randomUUID().toString().replaceAll("-","");
Filename = uuid + Filename; /**
* 使用的依赖是:
* <dependency>
* <groupId>joda-time</groupId>
* <artifactId>joda-time</artifactId>
*</dependency>
* new DateTime().toString(),toString()传入日期规则
* yyyy/MM-dd 形成 年为一个文件夹,月-日为一个文件夹
*/
org.joda.time.DateTime dateTime = new org.joda.time.DateTime();
String date = dateTime.toString("yyyy/MM/dd"); String filePath = date+"/"+Filename; /**
* 第一个参数 bucket名字
* 第二个参数 上传文件到阿里云OSS的文件路径和文件名称,filePath = path + fileName
* eg:/a/b/c.jpg
* 第三个参数 是文件输入流
*/
ossClient.putObject(bucketName,filePath,inputStream); //关闭ossClient
ossClient.shutdown(); String url = "https://"+bucketName+"."+endpoint+"/"+filePath;
//System.out.println("================="+url);
return url;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}

2. OSS的属性

点击查看代码
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliYunOssClient implements InitializingBean { private String endPoint;
private String keyId;
private String keySecret;
private String bucketName; public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME; //在给上面属性通过配置文件注入值之后,定义static变量,让外界直接用类名.的方式获取属性
//此方法在上面私有属性被注入值之后,可以执行下面的方法
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endPoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}

3. 上传接口的Controller

点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadController
* @Authorhmy
* @date 2023/1/2 10:17
* @description:文件图片上传
*/
@CrossOrigin
@RestController
public class UploadController { @Autowired
private OSSUtils ossUtils; @PostMapping("/upload")
public ResponseResult uploadImg(MultipartFile img){
String s = ossUtils.urlOSS(img);
return ResponseResult.okResult(s);
}
}

4. service接口

点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadService
* @Authorhmy
* @date 2023/1/2 10:19
* @description:文件图片上传
*/
public interface UploadService { /**
* 图片上传
* @param img:文件
* @return
*/
ResponseResult uploadImg(MultipartFile img);
}

5. Impl实现类

点击查看代码
/**
* @author 胡铭阳
* @ClassNameUploadServiceImpl
* @Authorhmy
* @date 2023/1/2 10:20
* @description
*/
@Service
public class UploadServiceImpl implements UploadService { @Autowired
private OSSUtils ossUtils; /**
* 图片上传
*
* @param img :文件
* @return
*/
@Override
public ResponseResult uploadImg(MultipartFile img) { String originalFilename = img.getOriginalFilename();
if (originalFilename.equals(".png")||originalFilename.equals(".jpg")||originalFilename.equals(".GIF")||originalFilename.equals(".BMP")){
throw new SystemException(AppHttpCodeEnum.FILE_TYPE_ERROR);
}
String s = ossUtils.urlOSS(img);
return ResponseResult.okResult(s);
} }

最新文章

  1. Winform水印
  2. [转载] 在java中为什么变量1000 = 1000 返回false,但是100=100返回true?
  3. codefroces 589A
  4. jquery Mobile应用第2课《构建跨平台APP:jQuery Mobile移动应用实战》连载二(简单的QWER键盘)
  5. C#使用Socket登陆WordPress源码
  6. Android APP安全评估工具 Drozer - 使用介绍
  7. close和shutdown函数的区别
  8. smartPtr指针的实现
  9. 每天一道LeetCode--389. Find the Difference
  10. [原]生产环境下的nginx.conf配置文件(多虚拟主机)
  11. (转)Linux 文件系统:procfs, sysfs, debugfs 用法简介
  12. spider爬站极度损耗站点流量
  13. Android MotionEvent事故响应机制
  14. 蓝桥杯-算法训练--ALGO-4 结点选择
  15. Spring源码情操陶冶-AnnotationConfigBeanDefinitionParser注解配置解析器
  16. Dynamic CRM工作流流程实战
  17. Node.js前端程序通过Nginx部署后刷新出现404问题的解决办法
  18. kaldi运行thchs30例子
  19. 解决SQL Server 2008安装时提示:重新启动计算机 失败
  20. Jmeter(二十四)Jmeter-Question之“加密请求参数”

热门文章

  1. iptables综合实验: 两个私有网络的互相通迅
  2. ES6 学习笔记(六)基本类型String
  3. KeeWiDB的高性能修炼之路:架构篇
  4. 我的Vue之旅 10 Gin重写后端、实现页面详情页 Mysql + Golang + Gin
  5. Vue3 企业级优雅实战 - 组件库框架 - 4 组件库的 CSS 架构
  6. 2022春每日一题:Day 7
  7. Linux 交叉编译使用代码覆盖GCOV及LCOV
  8. 第2-4-3章 规则引擎Drools基础语法-业务规则管理系统-组件化-中台
  9. Axios +Vue + themeleay
  10. 1 c++编程基础