springboot快速整合腾讯云COS对象存储

这篇具有很好参考价值的文章主要介绍了springboot快速整合腾讯云COS对象存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、导入相关依赖

<!--腾讯云COS-->
        <dependency>
            <groupId>com.tencentcloudapi</groupId>
            <artifactId>tencentcloud-sdk-java</artifactId>
            <version>3.0.1</version>
        </dependency>

        <dependency>
            <groupId>com.qcloud</groupId>
            <artifactId>cos_api</artifactId>
            <version>5.6.8</version>
        </dependency>

2、编写配置类,获取配置信息

创建配置类主要需要以下信息

腾讯云账号秘钥密码秘钥:用于创建COSClient链接对象,识别用户身份信息

存储桶区域:需要设置客户端所属区域Region

存储桶名称:创建请求时,需要告知上传到哪个存储桶下

存储桶访问路径:用于拼装上传文件完整访问路径

我获得的信息均写在配置类中,这里使用 @Value 或者 @ConfigurationProperties 都可以,写法就不多说,但是注意 @ConfigurationProperties 支持松散绑定,在识别读取配置信息时,不区分大小写,且会去掉中划线-、下划线_ (A-b_Obj→abobj→abObj),参考:SpringBoot松散绑定(宽松绑定)@ConfigurationProperties

import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.region.Region;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * @author phf
 * @description @ConfigurationProperties 松散绑定(中划线-、下划线_ 都去掉,且不区分大小写)
 */
@Component
@ConfigurationProperties(prefix = "cos")
@Data
public class CosConfig {
    /**
     * 腾讯云账号秘钥
     */
    private String secretId;
    /**
     * 密码秘钥
     */
    private String secretKey;
    /**
     * 存储桶地区
     */
    private String region;
    /**
     * 存储桶名称
     */
    private String bucketName;
    /**
     * 存储桶访问路径
     */
    private String path;

    /**
     * 初始化cos对象,配置相关配置信息
     */
    @Bean
    public COSClient cosClient(){
        // 1 初始化用户身份信息(secretId, secretKey)。
        COSCredentials cred = new BasicCOSCredentials(this.secretId, this.secretKey);
        // 2 设置 bucket 的区域
        Region region = new Region(this.region);
        ClientConfig clientConfig = new ClientConfig(region);
        // 3 生成 cos 客户端。
        COSClient cosClient = new COSClient(cred, clientConfig);
        return cosClient;
    }
}

配置信息获取

(1)进入腾讯云对象存储→创建存储桶(有则跳过),获取存储桶名称、区域、存储桶访问路径
springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

(2)获取腾讯云账号秘钥
springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

3、编写逻辑层——实现上传

我这里用了多文件上传,单文件上传,把数组和循环去掉即可

public interface ICosFileService {
    /**
     * 上传
     * @param files
     * @return
     */
     RestApiResponse<String> upload(MultipartFile[] files);

    /**
     * 删除
     * @param fileName
     * @return
     */
     RestApiResponse<Void> delete(String fileName);
}
@Slf4j
@Service
public class ICosFileServiceImpl implements ICosFileService {

    @Resource
    private COSClient cosClient;

    @Resource
    private CosConfig cosConfig;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public RestApiResponse<String> upload(MultipartFile[] files) {
        RestApiResponse<String> response = RestApiResponse.success();
        String res = "";
        try {
            for (MultipartFile file : files) {
                String originalFileName = file.getOriginalFilename();
                // 获得文件流
                InputStream inputStream = null;
                inputStream = file.getInputStream();

                // 设置文件路径
                String filePath = getFilePath(originalFileName, "你的桶内文件路径abc/def/test/");
                // 上传文件
                String bucketName = cosConfig.getBucketName();
                ObjectMetadata objectMetadata = new ObjectMetadata();
                objectMetadata.setContentLength(file.getSize());
                objectMetadata.setContentType(file.getContentType());
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, filePath, inputStream, objectMetadata);
                cosClient.putObject(putObjectRequest);
                cosClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
                String url = cosConfig.getPath() + "/" + filePath;
                res += url + ",";
            }
            String paths = res.substring(0, res.length() - 1);
            response.setData(paths);
            return response;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            cosClient.shutdown();
        }
        return RestApiResponse.fail();
    }

    @Override
    public RestApiResponse<Void> delete(String fileName) {
        cosConfig.cosClient();
        // 文件桶内路径
        String filePath = getDelFilePath(fileName, "你的桶内文件路径abc/def/test/");
        cosClient.deleteObject(cosConfig.getBucketName(), filePath);
        return RestApiResponse.success();
    }

    /**
     * 生成文件路径
     * @param originalFileName 原始文件名称
     * @param folder 存储路径
     * @return
     */
    private String getFilePath(String originalFileName, String folder) {
        // 获取后缀名
        String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
        // 以文件后缀来存储在存储桶中生成文件夹方便管理
        String filePath = folder + "/";
        // 去除文件后缀 替换所有特殊字符
        String fileStr = StrUtil.removeSuffix(originalFileName, fileType).replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", "_");
        filePath += new DateTime().toString("yyyyMMddHHmmss") + "_" + fileStr + fileType;
        log.info("filePath:" + filePath);
        return filePath;
    }
    /**
     * 生成文件路径
     * @param originalFileName 原始文件名称
     * @param folder 存储路径
     * @return
     */
    private String getDelFilePath(String originalFileName, String folder) {
        // 获取后缀名
        String fileType = originalFileName.substring(originalFileName.lastIndexOf("."));
        // 以文件后缀来存储在存储桶中生成文件夹方便管理
        String filePath = folder + "/";
        // 去除文件后缀 替换所有特殊字符
        String fileStr = StrUtil.removeSuffix(originalFileName, fileType).replaceAll("[^0-9a-zA-Z\\u4e00-\\u9fa5]", "_");
        filePath += fileStr + fileType;
        log.info("filePath:" + filePath);
        return filePath;
    }
}

 4、编写Controller测试

@Api(tags = "cos文件操作")
@RestController
@RequestMapping("/cos")
public class ICosFileController {

    @Autowired
    private ICosFileService iCosFileService;

    @ApiOperation(value = "文件上传", httpMethod = "POST")
    @PostMapping("/upload")
    public RestApiResponse<String> upload(@RequestParam("files") MultipartFile[] files) {
        RestApiResponse<String> result = iCosFileService.upload(files);
        return result;
    }

    @ApiOperation(value = "文件删除", httpMethod = "POST")
    @PostMapping("/delete")
    public RestApiResponse<String> delete(@RequestParam("fileName") String fileName) {
        iCosFileService.delete(fileName);
        return RestApiResponse.success();
    }
}

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

上传成功,且返回完整信息

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

删除时,保证删除的文件名称参数key,为桶内文件完整路径即可,如果你的桶是app-bucket-name,文件含桶路径是app-bucket-name/file1/file2/file.png,那桶内完整路径就是file1/file2/file.png

    public RestApiResponse<Void> delete(String fileName) {
        cosConfig.cosClient();
        // 文件桶内路径
        String filePath = getDelFilePath(fileName, "你的桶内文件路径abc/def/test/");
        // 这里的第二个参数,必须是桶内的完整路径
        cosClient.deleteObject(cosConfig.getBucketName(), filePath);
        return RestApiResponse.success();
    }

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

5、问题:COSClient报错连接池已关闭

之前自主调用了cosClient.shutdown,结果第二次上传时,就抛出异常,其实它自己维护了一个线程池:对象存储 Java SDK 常见问题-SDK 文档-文档中心-腾讯云

springboot快速整合腾讯云COS对象存储,spring boot,腾讯云,python

 

6、完整代码

https://download.csdn.net/download/huofuman960209/88085303文章来源地址https://www.toymoban.com/news/detail-609428.html

到了这里,关于springboot快速整合腾讯云COS对象存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2023新教程】树莓派定时自动拍照并上传腾讯云对象存储COS

    仅适用于 Release date: May 3rd 2023、Debian version: 11 (bullseye) 这个树莓派OS版本,其他版本不保证有效。 首先使用如下命令,查看自己树莓派的架构。 结果如下: 如果红圈处显示为 aarch64 ,使用命令 sudo nano /etc/apt/sources.list ,注释掉里面的所有内容,加入以下内容: 然后保存。

    2024年02月12日
    浏览(43)
  • 【golang】go获取腾讯云cos对象存储 并转为base64字符串输出

    需要引入腾讯云cos的sdk https://github.com/tencentyun/cos-go-sdk-v5 配置yaml如下: go代码编写如下:

    2024年02月11日
    浏览(53)
  • springboot集成COS对象存储

    新建密钥(后面配置要用到) 此处使用工具类进行基本属性配置,也可选择在yml中配置

    2024年01月22日
    浏览(56)
  • 腾讯云国际-如何使用对象存储COS在 CKafka 控制台创建数据异步拉取任务?腾讯云代充

    Datahub 支持接入各种数据源产生的不同类型的数据,统一管理,再分发给下游的离线/在线处理平台,构建清晰的数据通道。 本文以 COS 数据为例介绍如何在 CKafka 控制台创建数据异步拉取任务,并对任务进行修改配置,帮助用户更好地了解数据接入功能。 关联unirech注册腾讯云

    2024年02月08日
    浏览(59)
  • 腾讯云COS存储是什么_腾讯云COS有什么用?

    由于这是给新手写的东西,就尽量整得简单易懂些吧。 作为国内第二大的云服务厂商,安全性,可靠性这些东西就不用过多做介绍了(这里并非说他绝对安全,而是比那些小平台的安全性高N个级别) 腾讯云COS与隔壁阿里云的OSS都是提供对象存储的服务,(即文件存储)。比

    2024年02月11日
    浏览(34)
  • 腾讯云存储COS

    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种

    2024年02月12日
    浏览(46)
  • 腾讯云COS的快速接入

    最近在研究一个剪贴板粘贴工具,实现粘贴图片,返回可访问的地址,这个在我的哔哩哔哩上有出一期视频🤭。但是,我发现部分博客平台不能正常的转载我的图片链接,于是研究了一下腾讯云的COS(阿里的叫OSS,最开始我还不知道腾讯云的叫COS🥹),想着其它平台应该可

    2024年02月13日
    浏览(35)
  • [php-cos]ThinkPHP项目集成腾讯云储存对象COS

    Cos技术文档 1、安装phpSdk 通过composer的方式安装。 1.1 在composer.json中添加 qcloud/cos-sdk-v5: =2.0 将composer.lock删除,然后运行composer install 就安装成功了。 查看vendor中的是否存在qcloudcos-sdk-v5,安装包中有使用的例子:sample文件夹中。 2、添加配置文件 3、编写cos工具类 测试: pos

    2024年02月15日
    浏览(56)
  • SpringBoot整合阿里云OSS对象存储

    阿里云对象存储服务(Object Storage Service,简称OSS)为您提供基于网络的数据存取服务。使用OSS,您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种非结构化数据文件。 阿里云OSS将数据文件以对象(object)的形式上传到存储空间(bucket)中。 可以进行

    2024年02月06日
    浏览(54)
  • 在 Spring Boot 中集成 MinIO 对象存储

    MinIO 是一个开源的对象存储服务器,专注于高性能、分布式和兼容S3 API的存储解决方案。本文将介绍如何在 Spring Boot 应用程序中集成 MinIO,以便您可以轻松地将对象存储集成到您的应用中。 安装minio 拉取 minio Docker镜像 创建minio数据和配置目录 运行minio容器,设置访问和密钥并

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包