【VIDEO_Parent】-创作者前端-腾讯云对象存储

2023-11-30 23:42:40 浏览数 (1)

声明,之前用的某XX云,我推荐大家使用腾讯云COS: https://console.cloud.tencent.com/cos 本次使用的是腾讯云进行替换,所以大家看到文章如果有出现某XX云的,SDK等信息需要自行根据腾讯云文档进行替换即可

申请

开通之后的样子如下图:

点击管理控制台,进去之后, 点击立即开通,有个申请开通的按钮。

申请秘钥

Api 地址

地址:对象存储 快速入门-SDK 文档-文档中心-腾讯云 (tencent.com)

创建 service_upload 服务

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

代码语言:html复制
<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>

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

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

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

代码语言:yaml复制
# 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 管理 如下图:

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

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

如下的方式大家自行替换一下吧,最近没有时间更新到腾讯云,所以我给大家一个参考过程大概意思就是还需要拿到桶的 accessKey 来进行认证

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

定义工具类加载配置信息

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

    @Value("${oss.accessKeyId}")
    private String accessKeyId;

    @Value("${oss.accessKeySecret}")
    private String accessKeySecret;

    @Value("${oss.bucketName}")
    private String bucketName;

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

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

定义上传的控制器接口

代码语言:java复制
/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description 上传oss控制器
 * @since Created in 2021/4/3 12:53
 **/
@RestController
@RequestMapping("/service_upload/file")
@Api(tags = "上传OSS")
@CrossOrigin
public class UpLoadController {

    private final UpLoadService upLoadService;

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

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

}

定义上传的接口业务

代码语言:java复制
/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description 上传服务接口
 * @since Created in 2021/4/3 12:56
 **/
public interface UpLoadService {

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

}

OSS 上传业务实现

代码语言:java复制
/**
 * @author BNTang
 * @version 1.0
 * @project video_parent
 * @description OSS上传业务实现
 * @since Created in 2021/4/3 12:57
 **/
@Service
public class UpLoadServiceImpl implements UpLoadService {

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

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

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

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

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

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

            ossClient.putObject(bucketName, fileName, inputStream);

            // https://bntang.oss-cn-shanghai.aliyuncs.com/01-计算机语言概述1.png
            return "https://"   bucketName   "."   endpoint   "/"   fileName;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭OSSClient。
            if (null != ossClient) {
                ossClient.shutdown();
            }
        }
        return null;
    }
}

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

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

代码语言:java复制
@ComponentScan(basePackages = {"top.it6666"})

测试上传,成功,如下图

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

最后

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞