阿里云的官方文档一向做的非常详细,下方地址,强烈建议看一下官方文档
https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.6.788.32037815QD8fgC
step1
首先在application.yml配置文件中填写自己的相应配置信息(以下配置信息可以在阿里云官网控制台查看)
在pom文件中引入相应的依赖
<dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> </dependency>
step2
创建工具类,通过工具类获取application.yml文件中的配置信息(这步可以略过,直接在service层里获取),将配置信息定义成静态变量,可以直接通过“类名.”的方式获取
1 package com.atzjhydx.oss.utils; 2 3 import org.springframework.beans.factory.InitializingBean; 4 import org.springframework.beans.factory.annotation.Value; 5 import org.springframework.stereotype.Component; 6 7 @Component 8 //InitializingBean 的作用就是在 bean 初始化后执行定制化的操作。 9 public class ConstantPropertiesUtils implements InitializingBean { 10 11 @Value("${Aliyun.aFile.accessKeyId}") 12 private String accessKeyId; 13 14 @Value("${Aliyun.aFile.accessKeySecret}") 15 private String accessKeySecret; 16 17 @Value("${Aliyun.aFile.endpoint}") 18 private String endpoint; 19 20 @Value("${Aliyun.aFile.bucketName}") 21 private String bucketName; 22 23 public static String END_POINT; 24 public static String BUCKET_NAME; 25 public static String ACCESS_KEY_ID; 26 public static String ACCESS_KEY_SECRET; 27 28 @Override 29 public void afterPropertiesSet() throws Exception { 30 END_POINT = endpoint; 31 BUCKET_NAME = bucketName; 32 ACCESS_KEY_ID = accessKeyId; 33 ACCESS_KEY_SECRET = accessKeySecret; 34 } 35 }
step3
service层里实现具体的上传功能
1 package com.atzjhydx.oss.service.impl; 2 3 import com.aliyun.oss.HttpMethod; 4 import com.aliyun.oss.OSS; 5 import com.aliyun.oss.OSSClientBuilder; 6 import com.aliyun.oss.model.GeneratePresignedUrlRequest; 7 import com.atzjhydx.oss.service.OssService; 8 import com.atzjhydx.oss.utils.ConstantPropertiesUtils; 9 import org.joda.time.DateTime; 10 import org.springframework.stereotype.Service; 11 import org.springframework.web.multipart.MultipartFile; 12 13 import java.io.InputStream; 14 import java.net.URL; 15 import java.util.Date; 16 import java.util.UUID; 17 18 @Service 19 public class OssServiceImpl implements OssService { 20 @Override 21 public String uploadFileAvatar(MultipartFile file) { 22 23 //获取配置文件中的连接配置(通过自定义工具类获取) 24 String endpoint = ConstantPropertiesUtils.END_POINT; 25 String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID; 26 String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET; 27 String bucketName = ConstantPropertiesUtils.BUCKET_NAME; 28 29 OSS ossClient = null; 30 31 try { 32 //创建oss实例 33 ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); 34 35 //获取上传文件输入流 36 InputStream inputStream = file.getInputStream(); 37 38 //获取文件名称(使用uuid避免重名文件覆盖问题) 39 String originalFilename = file.getOriginalFilename(); 40 String uuid = UUID.randomUUID().toString().replaceAll("-",""); 41 String fileName = uuid + originalFilename; 42 //把文件按照日期进行分类(日期工具类使用的是joda-time,也可以使用java自带的工具类) 43 String dataPath = new DateTime().toString("yyyy/MM/dd"); 44 //日期构成的文件夹路径和文件名称合并 45 fileName = dataPath + "/" + fileName; 46 47 //调用oss方法实现上传 48 //第一个参数 Bucket名称 49 //第二个参数 上传到oss文件路径和文件名称 a/b/c/123.jpg 50 //第三个参数 上传文件输入流 51 ossClient.putObject(bucketName, fileName, inputStream); 52 53 //设置返回的url有效期为10年 54 Date expiration = new Date(new Date().getTime() + 10* 365 * 24 * 60 * 60 * 1000); 55 GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName,fileName,HttpMethod.GET); 56 req.setExpiration(expiration); 57 58 //回显url 59 URL url = ossClient.generatePresignedUrl(req); 60 return url.toString(); 61 62 }catch (Exception e){ 63 e.printStackTrace(); 64 return null; 65 }finally { 66 if (ossClient!=null){ 67 ossClient.shutdown(); 68 } 69 } 70 } 71 }
Controller层,将url信息返回给前端页面
1 package com.atzjhydx.oss.controller; 2 3 import com.atzjhydx.commonutils.R; 4 import com.atzjhydx.oss.service.OssService; 5 import org.springframework.beans.factory.annotation.Autowired; 6 import org.springframework.web.bind.annotation.CrossOrigin; 7 import org.springframework.web.bind.annotation.PostMapping; 8 import org.springframework.web.bind.annotation.RequestMapping; 9 import org.springframework.web.bind.annotation.RestController; 10 import org.springframework.web.multipart.MultipartFile; 11 12 @RestController 13 @RequestMapping("/eduoss/fileoss") 14 @CrossOrigin 15 public class OssController { 16 17 @Autowired 18 private OssService ossService; 19 20 //上传头像的方法 21 @PostMapping 22 public R uploadOssFile(MultipartFile file){ 23 24 //获取上传文件 25 //返回上传到oss的路径 26 String url = ossService.uploadFileAvatar(file); 27 28 return R.ok().data("url",url); 29 } 30 }