阿里云OSS图片上传与回显

阿里云的官方文档一向做的非常详细,下方地址,强烈建议看一下官方文档

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 }

猜你喜欢

转载自www.cnblogs.com/leeeeemz/p/12652967.html