首先需要一个阿里云账号,并且账号里面还开通了OSS储存功能(新用户有所有功能的三个月的免费试用) 阿里云网址:阿里云登录页 (aliyun.com) 需要创建一个bucket空间
总体流程图
我们需要获取自己创建的bucket空间的这四个要素:
导入依赖:
<!--阿里云oss-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.17.4</version>
</dependency>
还需要创建阿里云的配置类:
/**
* 阿里云 OSS 工具类
*/
@Component//添加到IOC(控制反转)容器,生成bean
public class AliOSSUtils {
@Autowired
private AliOSSProperties aliOSSProperties;//注入AliOSSProperties类下的aliyunOSS配置信息
/**
* 实现上传图片到OSS
*/
/*throws IOException, ClientException这个代码的作用是通过throws关键字声明这个upload在运行时,
如果在处理文件上传的过程中遇到了输入输出相关的错误(比如文件无法读取),就会抛出IOException。
如果遇到了与阿里云OSS客户端相关的错误(比如认证失败),就会抛出ClientException。 作用就是告诉方法调用者错误类型*/
public String upload(MultipartFile file) throws IOException, ClientException {
//获取阿里云OSS的配置参数
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKrySecret = aliOSSProperties.getAccessKeySecret();
String bucketName = aliOSSProperties.getBucketName();
// 获取上传的文件的输入流
InputStream inputStream = file.getInputStream();
// 避免文件覆盖
String originalFilename = file.getOriginalFilename();
String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
//上传文件到 OSS
OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,accessKrySecret);
ossClient.putObject(bucketName, fileName, inputStream);
//文件访问路径
String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}
这四个参数就是获取自己创建的bucket空间的四个要素
//获取阿里云OSS的配置参数
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKrySecret = aliOSSProperties.getAccessKeySecret();
String bucketName = aliOSSProperties.getBucketName();
我是把这个四个要素放在了.yml的配置文件当中并通过:
@Data
@Component//注入到IDC中
@ConfigurationProperties(prefix = "aliyun.oss")//和配置文件里面的aliyun.oss下的配置信息注入进来
public class AliOSSProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
这个类进行调用。
.yml配置文件:
#阿里云OSS配置
aliyun:
oss:
endpoint:
accessKeyId:
accessKeySecret:
bucketName:
(QwQ)最后一步就是创建一个文件上传的接口:
@Slf4j
@RestController
public class uploadController {
@Autowired
private AliOSSUtils aliOSSUtils;
@PostMapping("/upload")
public Result upload(MultipartFile image) throws Exception{
log.info("文件上传的原始文件名:{}",image.getOriginalFilename());
String url = aliOSSUtils.upload(image);
log.info("文件上传之后返回的文件url:{}",url);
return Result.success(url);
}
}