Springboot项目之阿里云OSS快速入门
阿里云oss
阿里云对象存储服务(Object Storage Service,简称OSS),是阿里云对外提供的海量、安全、低成本、高可靠的云存储服务。您可以通过本文档提供的简单的REST接口,在任何时间、任何地点、任何互联网设备上进行上传和下载数据。基于OSS,您可以搭建出各种多媒体分享网站、网盘、个人和企业数据备份等基于大规模数据的服务。
购买
这里就不用多说了上链接直接 https://www.aliyun.com/product/oss?spm=5176.19720258.J_2686872250.2.5e052c4aqm9WSD
购买开通 控制台https://oss.console.aliyun.com/overview
开通后进入阿里云oss 控制台
创建一个Bucket 然后进入AccessKey 创建一个AccessKey 并记录号他的AccessKey ID和secret
编写Java代码
1. 导入依赖
<!--阿里云oss--> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency>
2.配置(yml)
aliyun: oss: file: keyid: 这里就是Accesskey下的两个值 keysecret: bucketname: 这里是创建Bucket的名字和外网的地域节点 endpoint: oss-cn-xxxx.aliyuncs.com
3.编写工具类
@Component @PropertySource("classpath:application.yml") public class OssProperies 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;
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() throws Exception { END_POINT = endpoint; ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keysecret; BUCKET_NAME = bucketname; } }
4.Service
public interface OssService { String uploadFile (MultipartFile file) throws Exception; }
5.ServiceImpl
@Service public class OssServiceImpl implements OssService { @Override public String uploadFile(MultipartFile file) throws Exception { //读取工具类的数据 String endpoint = OssProperies.END_POINT; String accessKeyId = OssProperies.ACCESS_KEY_ID; String accessKeySecret = OssProperies.ACCESS_KEY_SECRET; String bucketName = OssProperies.BUCKET_NAME; //连接oss客户端 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件流 InputStream inputStream = file.getInputStream(); //这里最好对文件路径或名字做一下处理,防止文件名或路径重复导致文件丢失或者被覆盖 String url ="xxx/xxx/"+file.getOriginalFilename(); //上传 ossClient.putObject(bucketName, url, inputStream); // 关闭OSSClient。 ossClient.shutdown(); return "https://"+bucketName+"."+endpoint+"/"+url; } }
6.文件名路径防止重复的几种方式
a.日期时间,可以将以下值合理的拼接到路径或者文件名上
Calendar c = Calendar.getInstance(); int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int date = c.get(Calendar.DATE); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); int second = c.get(Calendar.SECOND);
b.通过随机数拼接文件名
UUID.randomUUID().toString()+"_"+fileName;
其他方法自行摸索,只要你的小脑袋还能动,你一定可以想到更好的方法。