1.在pom文件中引入阿里云依赖
<!--阿里云依赖-->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.1</version>
</dependency>
2.在Controller层编写UploadController,提供文件上传的接口
@RestController
public class UploadController {
@Autowired
private AliOSSUtils aliOSSUtils;
// 阿里云方式上传文件
@PostMapping("/请求路径")
public Result upLoadByAli(MultipartFile file) throws IOException {
String url = aliOSSUtils.upload(file); // 返回文件请求url
return Result.success(url);
}
}
3.在utils包工具类添加AliOSSUtils阿里云工具类
/**
* 阿里云 OSS 工具类
*/
@Component
public class AliOSSUtils {
/* 一般方法:引入配置文件的属性(一个一个的)
@Value("${aliyun.oss.endpoint}")
private String endpoint;
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
@Value("${aliyun.oss.bucketName}")
private String bucketName;
*/
//集中管理注入的方法:引入 引用了配置文件的属性 的对象(批量)
@Autowired
private AliOSSProperties aliOSSProperties;
//实现上传图片到OSS
public String upload(MultipartFile file) throws IOException {
//分配获取到的对象
String endpoint = aliOSSProperties.getEndpoint();
String accessKeyId = aliOSSProperties.getAccessKeyId();
String accessKeySecret = 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, accessKeySecret);
ossClient.putObject(bucketName, fileName, inputStream);
//文件访问路径
String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
// 关闭ossClient
ossClient.shutdown();
return url;// 把上传到oss的路径返回
}
}
4.在utils工具类添加AliOSSProperties阿里云配置类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Component //将该类的属性封装到 IOC容器
@ConfigurationProperties(prefix = "aliyun.oss") //指定属性的来源:即配置文件
public class AliOSSProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
5.在application.yml文件中配置阿里云信息
#阿里云配置对象
aliyun:
oss:
endpoint:
accessKeyId:
accessKeySecret:
bucketName:
6.配置后端跨域
加入自定义bean依赖
<!--自定义bean依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
在config包下新建CorsConfig
@Configuration
public class CorsConfig {
// 当前跨域请求最大有效时长。这里默认1天
private static final long MAX_AGE = 24 * 60 * 60;
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
corsConfiguration.setMaxAge(MAX_AGE);
source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
return new CorsFilter(source);
}
}