一、前置准备
首先我们需要在阿里云注册账号,实名认证后开通OSS功能,点击进入OSS功能的管理平台
进入概览页面后,点击Bucket列表,创建一个Bucket(相当于一个存放文件的文件夹)
关键是要获得下面几个关键的信息,只有拥有这些信息才能连接上这个Bucket进行操作:
endpoint:使用不同地方的服务器地址也不同
keyid:相当于登录账号,点击可自动导出你的id与sercret
keysecret:一长串的随机密钥供登录使用
bucketname:创建的BucketName名称
二、开始操作
添加对应依赖
<!-- 阿里云oss依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
</dependency>
<!-- 日期工具栏依赖 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
1、 首先我们创建一个配置文件,里面保存一些常规配置以及上面我们得到的关于oss的配置信息
# application.properties
#服务端口
server.port=8002
#服务名
spring.application.name=service-oss
#环境设置:dev、test、prod
spring.profiles.active=dev
#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=<!--endpoint-->
aliyun.oss.file.keyid=<!--keyid-->
aliyun.oss.file.keysecret=<!--keysecret-->
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=<!--bucketname-->
也可以使用yml文件
# application.yml
# 服务端口号
server:
port: 8002
spring:
# 服务名
application:
name: service-oss
# 环境设置:dev、test、prod
profiles:
active: dev
# 阿里云OSS
# 不同服务器地址不同
aliyun:
oss:
file:
endpoint: <!--endpoint-->
keyid: <!--keyid-->
keysecret: <!--keysecret-->
bucketname: <!--bucketname-->
2、创建一个工具类将配置文件中要使用的信息提取出来,解耦合
package com.xxx.oss.utils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/**
* Created by 令狐冲 on 2022/9/9 16:04
*/
// 项目启动时 spring加载 实现一个接口执行接口一个方法
@Component
public class ConstantPropertiesUtils implements InitializingBean {
// 读取配置文件中的内容
@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;
// 在spring生命周期中 实例化->生成对象->属性填充后会进行afterPropertiesSet方法
// 定义空开常用变量
public static String END_POINT;
public static String KEY_ID;
public static String KEY_SECRET;
public static String BUCKET_NAME;
@Override
public void afterPropertiesSet() throws Exception {
END_POINT = endpoint;
KEY_ID = keyId;
KEY_SECRET = keySecret;
BUCKET_NAME = bucketName;
}
}
3、编写service实现层实例化oss进行操作
package com.xxx.oss.service.impl;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.leader.oss.service.OssService;
import com.leader.oss.utils.ConstantPropertiesUtils;
import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
/**
* Created by 令狐冲 on 2022/9/9 16:25
*/
@Service
public class OssServiceImpl implements OssService {
// 上传头像到oss
@Override
public String uploadFileAvatar(MultipartFile file) {
// 从工具类中获取对象
String endpoint = ConstantPropertiesUtils.END_POINT;
String accessKeyId = ConstantPropertiesUtils.KEY_ID;
String accessKeySecret = ConstantPropertiesUtils.KEY_SECRET;
String bucketName = ConstantPropertiesUtils.BUCKET_NAME;
try {
// 创建OSS实例
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 获取上传文件的输入流
InputStream inputStream = file.getInputStream();
// 获取文件原始名称
String filename = file.getOriginalFilename();
// 完善1、 --> 在文件名中添加唯一值
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + filename;
// 完善2、 --> 把文件按照日期分类
String datePath = new DateTime().toString("yyyy/MM/dd");
// 拼接时间 yyyy/MM/dd/filename
filename = datePath + "/" + filename;
//System.out.println(filename);
// 调用oss方法实现上传
// 1、bucketName 2、上传到oss文件路径和文件名称 3、文件的输入流
ossClient.putObject(bucketName, filename, inputStream);
// 获取url地址(根据阿里云oss中的图片实例拼接字符串) 拼接url字符串
// https://edu-leader.oss-cn-beijing.aliyuncs.com/%E4%BB%96.jpg
String url = "https://"+bucketName+"."+endpoint+"/"+filename;
// 关闭oss
ossClient.shutdown();
return url;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
4、在控制层设置RequestMappint,通过swagger测试接口文章来源:https://www.toymoban.com/news/detail-454885.html
package com.xxx.oss.controller;
import com.leader.commonutils.R;
import com.leader.oss.service.OssService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
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;
/**
* Created by 令狐冲 on 2022/9/9 16:26
*/
@RestController
@RequestMapping("/oss/fileoss")
@CrossOrigin
public class OssController {
@Autowired
private OssService ossService;
//上传头像的方法
@PostMapping
public R uploadOssFile(MultipartFile file){
// MultipartFile -> 获取上传文件
// 返回上传到oss的路径
String url = ossService.uploadFileAvatar(file);
return R.success().data("url",url);
}
}
测试成功🙆♂️文章来源地址https://www.toymoban.com/news/detail-454885.html
到了这里,关于JAVA通过阿里云OSS存储实现图片上传功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!