前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【VIDEO_Parent】-创作者前端-腾讯云对象存储

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

原创
作者头像
BNTang
修改2023-11-30 23:42:40
1721
修改2023-11-30 23:42:40
举报

声明,之前用的某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-%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AF%AD%E8%A8%80%E6%A6%82%E8%BF%B01.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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 申请
  • 申请秘钥
  • Api 地址
  • 创建 service_upload 服务
  • 最后
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档