0
点赞
收藏
分享

微信扫一扫

创作者前端-云对象存储

申请

首先进入阿里云官网:​​https://www.aliyun.com/​​​ 搜索 ​​oss​

创作者前端-云对象存储_ide

点击管理控制台,进去之后, 点击立即开通

创作者前端-云对象存储_Project_02

开通之后的样子如下图

创作者前端-云对象存储_ide_03

创作者前端-云对象存储_ide_04

创作者前端-云对象存储_ide_05

申请秘钥

创作者前端-云对象存储_Project_06

创作者前端-云对象存储_ide_07

创作者前端-云对象存储_ide_08

创作者前端-云对象存储_Project_09

创作者前端-云对象存储_加载_10

创作者前端-云对象存储_上传_11

Api 地址

地址:​​https://help.aliyun.com/document_detail/32011.html?spm=a2c4g.11186623.6.939.68ec46a1Dmwj0L​​

创作者前端-云对象存储_上传_12

创建 service_upload 服务

创作者前端-云对象存储_Project_13

修改 service_upload 服务的 pom.xml 引入依赖

创作者前端-云对象存储_上传_14

<dependencies>
    <!-- 阿里云oss依赖 -->
    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
    </dependency>

    <!-- 日期工具类依赖 -->
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
    </dependency>
</dependencies>

添加启动类并排除加载数据库相关信息

创作者前端-云对象存储_ide_15

/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description OSS云上传服务
 * @since Created in 2021/4/3 12:17
 **/
@SpringBootApplication(exclude&nbsp;=&nbsp;DataSourceAutoConfiguration.class)
public&nbsp;class&nbsp;UpLoadApplication&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*
        exclude = DataSourceAutoConfiguration.class:默认会加载数据库相关信息,现在是上传服务,里面用不到数据库相关信息,不让工程加载数据库相关信息
        */
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SpringApplication.run(UpLoadApplication.class,&nbsp;args);
&nbsp;&nbsp;&nbsp;&nbsp;}
}

在 ​​resources​​​ 中添加配置文件 ​​application.yml​​ 内容如下

# application-dev.yml
server:
  port: 8002

logging:
  pattern:
    console: "%clr(%5p) %clr(-){faint} %clr(%-80.80logger{79}){cyan} %clr(:) %m%n"

spring:
  application:
    name: service-video
  profiles:
    active: dev

# 定义oss相关属性
oss:
  endpoint: oss-cn-hangzhou.aliyuncs.com
  accessKeyId: LTAI4GH19ep2P8caxW2E2N6A
  accessKeySecret: NAmWiBmKXofw7hs4JRcx7SLhF1MN6P
  bucketName: BNTang

oss 相关属性怎么来的呢,继续进入到我们上方开通好的 oss 管理控制台中选择 ​​Bucket 管理​​ 如下图

创作者前端-云对象存储_ide_16

按照我如下图进行选择即可,读写不能设置为私有,不然就不能访问了,同城冗余存储代表的是,如果出现故障了,它可以做备份,之前的数据还有,其它的就没什么要注意的了创建即可

创作者前端-云对象存储_上传_17

创建好了之后界面如下图所示,我下图选中了一个 ​​Endpoint​​​ 就是我们上方 oss 相关属性的 Endpoint 配置值,其它的在哪里呢,继续往下看 ​​accessKey​​​ 就是我们之前创建的那个 ​​accessKey​​ 的界面中的 accessKey,不知道找了可以参考下图

创作者前端-云对象存储_加载_18

创作者前端-云对象存储_上传_19

创作者前端-云对象存储_Project_20

创作者前端-云对象存储_加载_21

可能你一来不是显示的,需要获取验证码输入之后就可以看到了,复制上方的一些信息替换成你自己实际的即可配置完毕了, ​​bucketName​​ 就是你创建的 bucketName 的名称

创作者前端-云对象存储_上传_22

定义工具类加载配置信息

创作者前端-云对象存储_ide_23

/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description 读取配置的属性信息
 * @since Created in 2021/4/3 12:46
 **/
@Component
public&nbsp;class&nbsp;OssConstant&nbsp;implements&nbsp;InitializingBean&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;@Value(&quot;${oss.endpoint}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;endpoint;

&nbsp;&nbsp;&nbsp;&nbsp;@Value(&quot;${oss.accessKeyId}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;accessKeyId;

&nbsp;&nbsp;&nbsp;&nbsp;@Value(&quot;${oss.accessKeySecret}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;accessKeySecret;

&nbsp;&nbsp;&nbsp;&nbsp;@Value(&quot;${oss.bucketName}&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;String&nbsp;bucketName;

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;ENDPOINT;
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;ASSESS_KEY_ID;
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;ASSESS_KEY_SECRET;
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;BUCKET_NAME;

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * 在属性文件加载完毕后属性也设置完毕之后, 会自动调用
     */
&nbsp;&nbsp;&nbsp;&nbsp;@Override
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;afterPropertiesSet()&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDPOINT&nbsp;=&nbsp;endpoint;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSESS_KEY_ID&nbsp;=&nbsp;accessKeyId;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSESS_KEY_SECRET&nbsp;=&nbsp;accessKeySecret;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BUCKET_NAME&nbsp;=&nbsp;bucketName;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

定义上传的控制器接口

创作者前端-云对象存储_上传_24

/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description 上传oss控制器
 * @since Created in 2021/4/3 12:53
 **/
@RestController
@RequestMapping(&quot;/service_upload/file&quot;)
@Api(tags&nbsp;=&nbsp;&quot;上传OSS&quot;)
@CrossOrigin
public&nbsp;class&nbsp;UpLoadController&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;UpLoadService&nbsp;upLoadService;

&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;UpLoadController(UpLoadService&nbsp;upLoadService)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.upLoadService&nbsp;=&nbsp;upLoadService;
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <p>
     * 上传文件
     * </p>
     *
     * @param file 文件
     * @return 上传之后的文件下载地址 url
     */
&nbsp;&nbsp;&nbsp;&nbsp;@PostMapping(&quot;/uploadOssFile&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ResponseResult&nbsp;uploadOssFile(MultipartFile&nbsp;file)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;ResponseResult.ok().data(&quot;url&quot;,&nbsp;upLoadService.uploadFile(file));
&nbsp;&nbsp;&nbsp;&nbsp;}

}

定义上传的接口业务

创作者前端-云对象存储_加载_25

/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description 上传服务接口
 * @since Created in 2021/4/3 12:56
 **/
public&nbsp;interface&nbsp;UpLoadService&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;/**
     * <p>
     * 上传OSS文件
     * </p>
     *
     * @param file 文件
     * @return 上传之后的url
     */
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;uploadFile(MultipartFile&nbsp;file);

}

OSS 上传业务实现

创作者前端-云对象存储_ide_26

/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description OSS上传业务实现
 * @since Created in 2021/4/3 12:57
 **/
@Service
public&nbsp;class&nbsp;UpLoadServiceImpl&nbsp;implements&nbsp;UpLoadService&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;@Override
&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;String&nbsp;uploadFile(MultipartFile&nbsp;file)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Endpoint以上海为例,其它Region请按实际情况填写。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;endpoint&nbsp;=&nbsp;OssConstant.ENDPOINT;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 云账号AccessKey有所有API访问权限
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;accessKeyId&nbsp;=&nbsp;OssConstant.ASSESS_KEY_ID;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;accessKeySecret&nbsp;=&nbsp;OssConstant.ASSESS_KEY_SECRET;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;bucketName&nbsp;=&nbsp;OssConstant.BUCKET_NAME;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 创建OSSClient实例。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OSS&nbsp;ossClient&nbsp;=&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 创建OSSClient实例。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ossClient&nbsp;=&nbsp;new&nbsp;OSSClientBuilder().build(endpoint,&nbsp;accessKeyId,&nbsp;accessKeySecret);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 上传文件流。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;inputStream&nbsp;=&nbsp;file.getInputStream();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 处理文件名称
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;uuid&nbsp;=&nbsp;UUID.randomUUID().toString().replaceAll(&quot;-&quot;,&nbsp;&quot;&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;fileName&nbsp;=&nbsp;uuid&nbsp;+&nbsp;file.getOriginalFilename();

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 把同一天上传的文件 放到同一个文件夹当中  2020/10/1/fileName
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;date&nbsp;=&nbsp;new&nbsp;DateTime().toString(&quot;yyyy/MM/dd&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileName&nbsp;=&nbsp;date&nbsp;+&nbsp;&quot;/&quot;&nbsp;+&nbsp;fileName;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ossClient.putObject(bucketName,&nbsp;fileName,&nbsp;inputStream);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// https://bntang.oss-cn-shanghai.aliyuncs.com/01-%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AF%AD%E8%A8%80%E6%A6%82%E8%BF%B01.png
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&quot;https://" + bucketName + "." + endpoint + "/" + fileName;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;finally&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 关闭OSSClient。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(null&nbsp;!=&nbsp;ossClient)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ossClient.shutdown();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null;
&nbsp;&nbsp;&nbsp;&nbsp;}
}

重启工程进行测试上传,访问 swagger 选择需要上传的文件进行上传,在进行访问 swagger 的时候发现,弹出了如下图的内容,如果出现了下图中的内容就代表没有添加扫描包的注解

创作者前端-云对象存储_上传_27

修改 service_upload 的启动类添加如下注解即可

创作者前端-云对象存储_ide_28

@ComponentScan(basePackages&nbsp;=&nbsp;{&quot;top.it6666&quot;})

测试上传,成功,如下图

创作者前端-云对象存储_Project_29

查看阿里云 OSS 存储文件列表如下图,发现已经OK了

创作者前端-云对象存储_Project_30


举报

相关推荐

0 条评论