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; } }