引入阿里云OSS依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.1.0</version> </dependency>
现在已经到3.10了,具体可以参见阿里云OSS官网
项目目录结构
配置文件中放置OSS关键信息例如:
#阿里云 OSS #不同的服务器,地址不同 aliyun.oss.file.endpoint=//自己的地域节点 aliyun.oss.file.keyid=//自己的keyid aliyun.oss.file.keysecret=//自己的keysecret #bucket可以在控制台创建,也可以使用java代码创建 aliyun.oss.file.bucketname=//自己的bucketname
ConstantPropertiesUtil为读取配置文件中的常量
@Component public class ConstantPropertiesUtil 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_POIND; public static String ACCESS_KEY_ID; public static String ACCESS_KEY_SECRET; public static String BUCKET_NAME; @Override public void afterPropertiesSet() throws Exception { END_POIND = endpoint; ACCESS_KEY_ID = keyId; ACCESS_KEY_SECRET = keySecret; BUCKET_NAME = bucketName; } }
controller
@Autowired private OssService ossService; //上传头像的方法 @PostMapping public R uploadOssFile(MultipartFile file) { //获取上传文件 MultipartFile //返回上传到oss的路径 String url = ossService.uploadOssFile(file); return R.ok().data("url",url); }
serviceimpl 输出可以去掉
@Override public String uploadOssFile(MultipartFile file) { //获取四个值 String endpoint = ConstantPropertiesUtil.END_POIND; String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID; String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET; String bucketName = ConstantPropertiesUtil.BUCKET_NAME; //获取文件名称 String fileName = file.getOriginalFilename(); //获取随机字符串并拼接文件名 String s = UUID.randomUUID().toString().replaceAll("-", ""); //获得新的文件名 String newFileName=s+fileName; System.out.println(newFileName); //获取当前年月日 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf.format(new Date()); System.out.println(format); //日期加文件民拼接成为OSS中的路径 String OSSPath=format+"/"+newFileName; System.out.println(OSSPath); //开启OSS OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { //获取文件流 InputStream inputStream = file.getInputStream(); //传入地域节点,OSS中的路径例如a/bb/c.jpg,文件流 ossClient.putObject(bucketName, OSSPath,inputStream); }catch (Exception e){ } finally { // 关闭OSSClient。 ossClient.shutdown(); } //把上传之后文件路径返回 //需要把上传到阿里云oss路径手动拼接出来 String url = "https://"+bucketName+"."+endpoint+"/"+fileName; return url; }
测试