1.注册阿里云账号(以有阿里云账号可忽略此步骤!)
打开阿里云官网:https://www.aliyun.com/
三、前期准备工作
1.阿里云实名验证
注意:完成阿里云实名验证(此步骤必做!不然无法开通OSS服务!)
1、登录阿里云账号后点击控制台:
2、点击头像--->点击实名验证---->选择个人验证------>支付宝登录授权即可完成实名验证!
开通OSS服务
点击立即开通即可!
3.创建Bucket存储空间
开通服务后,在OSS产品详情页面单击管理控制台直接进入OSS管理控制台界面。您也 可以单击位于官网首页右上方菜单栏的控制台,进入阿里云管理控制台首页,然后单 击左侧的对象存储OSS菜单进入OSS管理控制台界面。OSS管理控制台 (aliyun.com)
注意:这里选择地域可以根据自己喜好选择,也可根据我的。如果选择其他地域的同学!记得在文件上传的Java类中修改地域名!(下面会进行讲解!)
4、获取AccessKey ID 和 AccessKey Secret
控制台----->进入OSS对象存储服务---->点击头像---->点击AccessKey管理----->创建密钥
注意!!!:在验证身份后会自动跳出创建好的Access Key!一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!! 重要的事情说三遍!!!
第一遍!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
第二遍!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
第三遍!!!:一定记得保存好!!!后面会用!如果没复制保存!后期也无法查询到AccessKey Secret!!!
创建application.properties文件
根据申请好的阿里云配置
导入依赖
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.1.0</version>
</dependency>
<!--日期时间工具-->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.1</version>
</dependency>
<!--hutool工具类-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.26</version>
</dependency>
<!-- springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.plants.common</groupId>
<artifactId>plant-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--springboot集成mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<version>3.2.6</version>
<scope>test</scope>
</dependency>
Controller层
@RestController
@Slf4j
@RequestMapping("/oss")
public class OssController {
@Autowired
private OssService ossService;
/**
* 上传头像
*/
@PostMapping("/fileoss")
public Result uploadOSSFile(MultipartFile file) {
//获取上传文件 MultipartFile
//返回上传到oss的路径
log.info("file==========================={}", file);
String url = ossService.uploadFileAvatar(file);
log.info("url==========================={}", url);
if (url==null&&url.isEmpty()){
return Result.build(url, ResultCodeEnum.FAIL);
}
return Result.build(url, ResultCodeEnum.SUCCESS);
}
}
Service层
package com.plant.oss.service;
import org.springframework.web.multipart.MultipartFile;
public interface OssService {
/**
* 上传头像到oss
* @param file 文件对象
* @return
*/
String uploadFileAvatar(MultipartFile file);
}
ServiceImpl层
@Service
public class OssServiceImpl implements OssService {
/**
* 上传头像到oss
*
* @param file 文件对象
* @return
*/
@Override
public String uploadFileAvatar(MultipartFile file) {
if (file == null || file.isEmpty()) {
return "文件为空,请选择文件后再上传。";
}
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = ConstantPropertiesUtils.END_POINT;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
//块名
String bucketName=ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
InputStream inputStream = file.getInputStream();
//获取文件真实名称
String originalFilename = file.getOriginalFilename();
//重命名,防止相同文件出现覆盖 生成的f4f2e1a3-391a-4d5a-9438-0c9f5d27708=》需要替换成f4f2e1a3391a4d5a94380c9f5d27708c
String uuid = UUID.randomUUID().toString().replaceAll("-","");
//新的文件名
originalFilename=uuid+originalFilename;
//2、把文件按照日期进行分类
// 2021/6/30
String datePath = new DateTime().toString("yyyy/MM/dd");
//拼接 021/6/30/1.jpg
originalFilename=datePath+"/"+originalFilename;
// oss实现上传文件
//第一个参数:Bucket名称
//第二个参数:上传到oss文件路径和文件名称 /zhz/avatar.txt
ossClient.putObject(bucketName, originalFilename, inputStream);
// 关闭OSSClient。
ossClient.shutdown();
//把上传之后文件路径返回
//需要把上传到阿里云oss路径手动拼接出来->https://zhz-mail.oss-cn-beijing.aliyuncs.com/WechatIMG19.jpeg
return "https://"+bucketName+"."+endpoint+"/"+originalFilename;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
还有最重要的一个工具类 来初始化我们的一个配置
@Component
@ConfigurationProperties(prefix = "aliyun.oss.file")
public class ConstantPropertiesUtils implements InitializingBean {
/**
* 对应公网endpoint地址
*/
@Value("${aliyun.oss.file.endpoint}")
private String endpoint;
/**
* 账号
*/
@Value("${aliyun.oss.file.keyid}")
private String keyId;
/**
* 密码
*/
@Value("${aliyun.oss.file.keysecret}")
private String keySecret;
/**
* 对应要存储到哪个块
*/
@Value("${aliyun.oss.file.bucketname}")
private String bucketName;
public static String END_POINT;
public static String ACCESS_KEY_ID;
public static String ACCESS_KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet(){
END_POINT=endpoint;
ACCESS_KEY_ID=keyId;
ACCESS_KEY_SECRET=keySecret;
BUCKET_NAME=bucketName;
}
}