腾讯云COS桶文件上传下载工具类

在这里插入图片描述

1,申请key和密钥

2,引入依赖

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

3,工具类

package com.example.activity.utils;

import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONUtil;
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.model.GeneratePresignedUrlRequest;
import com.qcloud.cos.model.ObjectMetadata;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class TencentCOSUtils {
    /**
     * COS SECRETID
     */
    private static String SECRETID = "ebOzOp8NafZL2ZxKX";
    /**
     * COS SECRETKEY
     */
    private static String SECRETKEY = "WBhz59DF";
    /**
     * COS BUCKETNAME bucket的命名规则为{name}-{appid} ,存储桶名称必须为此格式
     */
    private static String BUCKETNAME = "i959430";
    private static String filePathPrefix = "/jo";

    private static String region = "ou";

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("G:\\Download\\aa.jpg");
        Map<String, String> upload = upload(file);
        System.out.println(JSONUtil.toJsonStr(upload));
    }

    /***
     * 上传文件
     * @param file
     * @return
     */
    public static Map<String, String> upload(File file) {
        COSClient cosClient = null;
        FileInputStream fileInputStream = null;
        Map<String, String> result = new HashMap<>();
        try {
            fileInputStream = new FileInputStream(file);
            //获取最后一个.的位置
            int lastIndexOf = file.getName().lastIndexOf(".");
            //获取文件的后缀名 .jpg
            String suffix = file.getName().substring(lastIndexOf);
            String filename = filePathPrefix + "/" + DateUtil.format(new Date(), "yyyyMMdd") + "/" + System.currentTimeMillis() + suffix;
            // 1 初始化用户身份信息(secretId, secretKey)。
            COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);
            // 2 设置bucket的区域, COS地域的简称请参照
            // https://cloud.tencent.com/document/product/436/6224
            // clientConfig中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者接口文档 FAQ中说明。
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            // 3 生成 cos 客户端。
            cosClient = new COSClient(cred, clientConfig);
            // 指定要上传到的存储桶,指定要上传到 COS 上对象键
            ObjectMetadata objectMetadata = new ObjectMetadata();
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKETNAME, filename, fileInputStream, objectMetadata);
            cosClient.putObject(putObjectRequest);
            result.put("fileName", filename);
            result.put("absolutePath", getAbsolutePath(filename));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (cosClient != null) {
                // 关闭客户端(关闭后台线程)
                cosClient.shutdown();
            }
            if (fileInputStream != null) {
                try {
                    fileInputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }

 	/**
     * 下载文件
     *
     * @param fileName COS桶的文件路径
     * @param  outPath 输出路径
     */
    public static void downFile(String fileName, String outPath) {
        COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);
        ClientConfig clientConfig = new ClientConfig(new Region(region));
        COSClient cosClient = new COSClient(cred, clientConfig);
        GetObjectRequest getObjectRequest = new GetObjectRequest(BUCKETNAME, fileName);
        ObjectMetadata object = cosClient.getObject(getObjectRequest, new File(outPath + "/" + fileName));
        System.out.println(object);
    }

    // 删除文件
    public static void delete(String filename) {
        COSClient cosClient = null;
        try {
            // 1 初始化用户身份信息(secretId, secretKey)。
            COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);
            // 2 设置bucket的区域, COS地域的简称请参照
            // https://cloud.tencent.com/document/product/436/6224
            // clientConfig中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者接口文档 FAQ
            // 中说明。
            ClientConfig clientConfig = new ClientConfig(new Region(region));
            // 3 生成 cos 客户端。
            cosClient = new COSClient(cred, clientConfig);
            cosClient.deleteObject(BUCKETNAME, filename);
        } finally {
            if (cosClient != null) {
                // 关闭客户端(关闭后台线程)
                cosClient.shutdown();
            }
        }

    }

    /***
     * 获取文件的绝对路径
     * @param fileName 文件名称
     * @return url
     */
    public static String getAbsolutePath(String fileName) {
        // 1 初始化用户身份信息(secretId, secretKey)
        COSCredentials cred = new BasicCOSCredentials(SECRETID, SECRETKEY);
        // 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
        // clientConfig中包含了设置region, https(默认http), 超时, 代理等set方法, 使用可参见源码或者接口文档FAQ中说明
        ClientConfig clientConfig = new ClientConfig(new Region(region));
        // 3 生成cos客户端
        COSClient cosclient = new COSClient(cred, clientConfig);
        // 设置URL过期时间为1小时 60*60*1000()
        Date expiration = new Date(System.currentTimeMillis() + 60 * 60 * 1000);
        GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(BUCKETNAME, fileName);
        // 设置签名过期时间(可选), 若未进行设置, 则默认使用 ClientConfig 中的签名过期时间(5分钟)
        generatePresignedUrlRequest.setExpiration(expiration);
        String url = cosclient.generatePresignedUrl(generatePresignedUrlRequest).toString();
        return url;
    }

}

4,注意事项

1,SECRETID和SECRETKEY 需要有读写权限
2,获取的文件地址有时间限制,过期后需要重新获取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/314865.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker基础命令

Docker常用命令 docker run docker run [OPTIONS] IMAGE [COMMAND] [ARG...] -e设置环境变量&#xff1b;-e usernameyjy --name为容器指定一个名称&#xff1b;--nameyjy -p指定端口映射&#xff0c;格式为&#xff1a;主机(宿主)端口:容器端口 -p 80:8080 -t为容器重新分…

WARNING: IPv4 forwarding is disabled. Networking will not work.

今天用docker部署容器&#xff0c;发现一个问题&#xff0c;docker-compose up启动成功&#xff0c;但无法正常访问接口。 查找问题步骤&#xff1a; 1、直接在服务器运行jar包&#xff0c;发现可以正常启动&#xff0c;也能正常访问接口&#xff0c;排除jar包本身问题以及防…

用C#实现简单的线性回归

前言 最近注意到了NumSharp&#xff0c;想学习一下&#xff0c;最好的学习方式就是去实践&#xff0c;因此从github上找了一个用python实现的简单线性回归代码&#xff0c;然后基于NumSharp用C#进行了改写。 NumSharp简介 NumSharp&#xff08;NumPy for C#&#xff09;是一个在…

STM32F103RCT6开发板M3单片机教程07-TIMER1CH1输出 PWM做LED呼吸灯

概述 本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; 免费开发板 在谷动谷力社区注册用户&#xff0c;打卡&#xff0c;发帖求助都可以获取积分&#xff0c;当然最主要是发原创应用文档奖励更多积分&#xff0e; (可用积分换取&#xff0c;真的不用钱&…

什么是 CAS

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

C语言快速排序——qsort函数

上面的是我们标准C语言库里面对qsort函数的介绍&#xff0c;我们先来从排序说起&#xff1a; 这就不得不提出编程中最最基础的排序算法---冒泡排序 对于一个任意的无序数列&#xff0c;我们如果想要把他排成顺序数列的话&#xff0c;我们就可以让每一项跟后面的一项去比较&…

基于汽车胎压检测及温度预警

课题简介 汽车胎压监测系统可分为两种&#xff1a;一种是间接式胎压监测系统&#xff0c;是通过轮胎的转速差来判断轮胎是否异常&#xff1b;另一种是直接式胎压监测系统&#xff0c;通过在轮胎里面加装四个胎压监测传感器&#xff0c;在汽车静止或者行驶过程中对轮胎气压和温…

轻量化的yolov8部署到安卓Android手机端

一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境&#xff0c;和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接&#xff1a; 下载 Android Studio 和应用工具 - And…

语义补全任务2023年论文总结

一、3D Semantic Scene Completion: a Survey 语义场景补全SSC旨在联合估计出一个场景完整的几何和语义信息&#xff0c;假设只需要部分稀疏输入数据。 1、数据集 2、场景表示 Point Cloud&#xff0c;点云是一种方便的、记忆高效的表示方法&#xff0c;它将三维连续世界中的…

图灵机:计算机科学的奠基之作

图灵机的概念由英国数学家阿兰图灵在1936年提出&#xff0c;这个时期正是计算机科学的黎明时分。那个时候&#xff0c;人们还在使用机械计算器进行计算&#xff0c;而且这些计算器的功能都非常有限。 图灵提出这个概念的初衷&#xff0c;是为了解决所谓的“判定问题”&#xf…

关于react-native-reanimated 3.6.1在react native debugger报错问题

ExceptionsManager.js:158 Error: [Reanimated] UpdatePropsManager is not available on non-native platform. 在node_module下找到找到相关文件&#xff0c;注释掉相关代码 然后打补丁放在自己的项目下&#xff0c;关于打补丁在博客主页&#xff0c;自行查看讲解

番外篇-如何开发智能合约入门

今天咱们聊聊如何开发智能合约&#xff0c;非常入门的分享~ 1. 如何开发智能合约 1.1. 基本流程 & 主流工具 1.1.1. 编写合约代码 Solidity仍然是一骑绝尘&#xff08;EVM&#xff09;Vyper是不太活跃语言&#xff0c;python语法&#xff08;EVM&#xff09;Rust不能应…

【pwn】cmcc_simplerop --rop链的构造

程序保护情况检查 32位程序&#xff0c;堆栈不可执行 主函数&#xff1a; 左边又是一堆函数&#xff0c;file看一下 发现是静态链接&#xff0c;那ret2libc不用考虑了&#xff0c;接着看一下有没有int 80 那可以考虑利用rop链调用execve函数&#xff0c;用系统调用的函数参数是…

想做鸿蒙开发应该学会哪些知识?

鸿蒙开发学习是一项探索性的工作&#xff0c;旨在开发一个全场景分布式操作系统&#xff0c;覆盖所有设备&#xff0c;让消费者能够更方便、更直观地使用各种设备。 鸿蒙系统定位为面向未来、面向全场景&#xff08;移动办公、运动健康、社交通信、媒体娱乐等&#xff09;的分…

Mysql时间差8小时解决方案

目录 1. MySQL 本身的问题1-1. 验证MySQL时间1-2. 修改Mysql时区配置文件修改Mysql时区SQL修改Mysql时区 2.JDBC 连接的问题3. 返回 JSON 时间不对 在开发中&#xff0c;有可能会遇到这种情况&#xff1a; 插入数据库中的时间时正常。但是将时间传到前端页面上显示时&#xff…

Docker安装Elesticsearch7详细步骤

​ 1、创建安装目录 mkdir -p /usr/local/docker/es-docker 2、配置虚拟内存 如果不配置&#xff0c;后面启动es会报错。 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 配置如下 vi /etc/sysctl.conf vm.max_map_coun…

光伏行业常用到的专业名词有哪些?都是什么意思?

光伏行业作为新能源领域的重要组成部分&#xff0c;涉及许多专业名词。本文将介绍一些常用的专业名词及其含义。 光伏电池&#xff1a;光伏电池是光伏发电系统的核心部件&#xff0c;能够将太阳能转换成直流电能。它是通过光生电效应工作的。 光伏组件&#xff1a;光伏组件是…

【vue3】vue3的应用实例是什么和怎么使用

简言 每个 Vue 应用都是通过 createApp 函数创建一个新的应用实例。 应用实例指的就是createApp的返回值&#xff0c;它是一个对象&#xff0c;里面包含了多个vue相关的属性&#xff0c;例如component&#xff08;组件&#xff09;、directive&#xff08;指令&#xff09;use…

自动化测试数据校验神器!

在做接口自动化测试时&#xff0c;经常需要从接口响应返回体中提取指定数据进行断言校验。 今天给大家推荐一款json数据提取神器: jsonpath jsonpath和常规的json有哪些区别呢&#xff1f;在Python中&#xff0c;json是用于处理JSON数据的内置模块&#xff0c;而jsonpath是用…

代码随想录 516. 最长回文子序列

题目 给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s “bbbab” 输出&…