好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringBoot整合阿里云OSS对象存储服务实现文件上传

1. 准备工作:

一、首先登录 阿里云OSS对象存储控制台 创建一个Bucket作为你的存储空间。
二、创建Access Keyan按要求创建进行,这里的方法步骤我就不展现出来了,你们可以自行查询 阿里云 文档,这个获取值本身就不难。
重点:记下你的AccessKey ID、AccessKey Secret以及你刚才创建的Buacket名字BucketName。

2. 配置:

在pom里引入oss要用的依赖

?

1

2

3

4

5

< dependency >

     < groupId >com.aliyun.oss</ groupId >

     < artifactId >aliyun-sdk-oss</ artifactId >

     < version >3.10.2</ version >

</ dependency >

在application.yml里面添加配置文件

?

1

2

3

4

5

6

7

8

9

10

11

12

# 定义的端口号

server:

   port: 8080

 

aliyun:

   oss:

     #yourEndpoint填写Bucket所在地域对应的Endpoint,可在创建好的Bucket概况页查看。

     endpoint: oss-cn-chengdu.aliyuncs测试数据       # 以成都为例,Endpoint填写为https://oss-cn-chengdu.aliyuncs测试数据

     #阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户

     accessKeyId: **********             # 阿里云账号AccessKey里所对应的AccessKey ID

     accessKeySecret: **********             # 阿里云账号AccessKey里所对应的AccessKey Secret

     bucketName: **********              # OSS 对象存储空间名

3. 详细代码:

第一步:创建一个service包,新建一个AliyunOssService.java

?

1

2

3

4

5

6

7

8

import org.springframework.stereotype.Service;

import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

 

@Service

public interface AliyunOssService {

     Map<String, Object> upload(MultipartFile file, String fileName);

}

第二步:在service包里创建一个impl包,新建一个AliyunOssServiceImpl.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import com.system.demo.service.AliyunOssService;

import com.system.demo.util.FileUploadUtil;

import org.springframework.stereotype.Service;

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

import java.util.HashMap;

import java.util.Map;

 

@Service ( "aliyunOssService" )

public class AliyunOssServiceImpl implements AliyunOssService {

 

     @Resource

     private FileUploadUtil fileUploadUtil;

 

     @Override

     public Map<String, Object> upload(MultipartFile file, String fileName){

         //定义一个目录(这里的目录可根据自己实际情况自己拼接定义)

         String path = "a" ;   //我这里就随便定义一个a文件夹

         //拼接,这里将路径和文件名拼接在了一起

         fileName = path + "/" +fileName;

         Map<String, Object> map = new HashMap<>();

         map.put( "code" , 200 );

         map.put( "msg" , "查询成功" );

         map.put( "data" , this .fileUploadUtil.upload(file, fileName));

         return map;

     }

 

}

第三步:创建一个util包,新建一个FileUploadUtil.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

import com.aliyun.oss.OSS;

import com.aliyun.oss.OSSClientBuilder;

import com.aliyun.oss.model.ObjectMetadata;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

import java.io.InputStream;

 

@Component

public class FileUploadUtil {

 

     @Value ( "${aliyun.oss.endpoint}" )

     private String endpoint;

 

     @Value ( "${aliyun.oss.accessKeyId}" )

     private String accessKeyId;

 

     @Value ( "${aliyun.oss.accessKeySecret}" )

     private String accessKeySecret;

 

     @Value ( "${aliyun.oss.bucketName}" )

     private String bucketName;

 

     public String upload(MultipartFile file, String fileName){

             // 写入文件

             try {

                 //获取上传的输入流

                 InputStream inputStream = file.getInputStream();

 

                 //设置访问地址是默认是预览图片

                 ObjectMetadata meta = new ObjectMetadata();

                 meta.setContentType( "image/jpg" );

 

                 // 创建OSSClient实例

                 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

 

                 /*

                 调用oss上传到阿里云对象存储oss----Bucket存储空间

                 第一个参数 bucket名称

                 第二个参数 文件名称

                 第三个参数 输入流

                 第四个参数 文件类型

                  */

                 ossClient.putObject(bucketName, fileName, inputStream, meta);

 

                 // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。

                 //ossClient.deleteObject(bucketName, "a/");

 

                 // 关闭OSSClient。

                 ossClient.shutdown();

 

                 //上传成功后获取文件路径

                 String url = "https://" + bucketName + "." + endpoint + "/" + fileName;

                 return url;

             } catch (IOException e) {

                 e.printStackTrace();

             }

         return null ;

     }

}

第四步:定义接口创建一个controller包,新建一个FileUpload.java

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import com.system.demo.service.impl.AliyunOssServiceImpl;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;

import java.util.Map;

 

@RestController

@RequestMapping ( "oss" )

public class FileUpload {

 

     @Resource

     private AliyunOssServiceImpl aliyunOssServiceImpl;

 

     @RequestMapping (value = "fileoss" , method = RequestMethod.POST)

     public Map<String, Object> uploadOssFile(MultipartFile file, String fileName){

         return this .aliyunOssServiceImpl.upload(file, fileName);

 

     }

}

4. 测试:

首先运行启动类,在Postman进行测试
选择请求方式:POST
请求路径:localhost:8080/oss/fileoss
选择Body-->form-data
-----第一列数据:KEY为file,选择类型为File,添加VALUE为自己想要上传的文件;
-----第二列数据:KEY为fileName,选择类型为Text,添加VALUE为的文件名

如下图:

添加完成后,点击send,发起请求,等待返回数据,返回的JSON格式中data所对应的地址,为该文件的预览地址。
同时,你也可在你的OSS里面查看你的文件。

以上就是 SpringBoot 整合阿里云OSS对象存储实现 文件上传 的详细内容,更多关于SpringBoot整合阿里云OSS的资料请关注其它相关文章!

原文链接:https://HdhCmsTestcnblogs测试数据/b-bear/p/14655933.html

查看更多关于SpringBoot整合阿里云OSS对象存储服务实现文件上传的详细内容...

  阅读:27次