aliyun 实现文件上传
1、添加 aliyun 对象存储相关依赖
<!-- 阿里云 OSS 对象存储相关依赖 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
2、在 aliyun 平台上面提前开通 OSS 对象存储服务, 并在对象存储的 bucket 列表中创建 bucket, 存储少量文件不会收费
2.1、获取 bucketName
2.2、获取 endpoint
2.3、获取 accessKeyId 和 accessKeySecret
3、如果你在微服务中使用该业务, nacos 远程配中心的相关配置,; 只是在 SpringBoot 中简单使用则忽略这一步
oss:
endpoint: your Endpoint
accessKeyId: your accessKeyId
accessKeySecret: your accessKeySecret
bucketName: your bucketName
4、属性配置类(微服务中使用这种方式)
@Getter
@Setter
@ConfigurationProperties(prefix = "oss")
public class OSSProperties {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
}
属性配置类(SpringBoot 中简单使用, 选择下面这种方式)
@Getter
@Setter
public class OSSProperties {
@Value("your endpoint")
private String endpoint;
@Value("your accessKeyId")
private String accessKeyId;
@Value("your accessKeySecret")
private String accessKeySecret;
@Value("your bucketName")
private String bucketName;
}
OSS 配置类
@Configuration
@EnableConfigurationProperties(OSSProperties.class)
public class OSSConfig {
@Autowired
private OSSProperties properties;
@Bean(destroyMethod = "shutdown")
public OSS ossClient() {
return new OSSClient(properties.getEndpoint(), properties.getAccessKeyId(), properties.getAccessKeySecret());
}
}
5、文件上传下载的工具类, OSSUtils 工具类中使用的 SpringUtils 获取 bean 对象的工具方法, 请参照 Spring bean的工具类
/**
* 需求: 当前类中有方法需要获取 Spring 容器中的对象. 但是该类无法交给 Spring 容器管理
*/
public class OSSUtils {
public static String uploadFile(String path, MultipartFile file) {
// 从 Spring 容器中获取对象
OSS ossClient = SpringUtils.getBean("ossClient", OSS`class);
OSSProperties properties = SpringUtils.getBean(OSSProperties.class);
String filename = UUID.randomUUID().toString().replaceAll("-", "");
try {
// 获取原始文件名
String originalFilename = file.getOriginalFilename();
String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
filename = path + "/" + filename + "." + suffix;
InputStream inputStream = file.getInputStream();
// 简单类型的文件上传
ossClient.putObject(properties.getBucketName(), filename, inputStream);
// http://cd-wolf2w-cloud.oss-cn-chengdu.aliyun.com/xxx.jpg
return "https://" + properties.getBucketName() + "." + properties.getEndpoint() + "/" + filename;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
6、在Controller控制层调用业务方法, AjaxResult 统一结果响应处理对象请参照 MyBatis Plus 实现简单分页(拓展性强)
@PostMapping("/uploadImg")
public AjaxResult<?> uploadImg(MultipartFile upload) {
// 图片的原始名字
String originalFilename = upload.getOriginalFilename();
String url = OSSUtils.uploadFile("images", upload);
return AjaxResult.success()
.put("fileName", originalFilename)
.put("uploaded", 1)
.put("url", url);
}
7、上传成功之后, 就可以在 bucket 列表中查看自己上传成功的文件了