文件上传到腾讯云存储、签名及设置过期时间

将文件上传到腾讯云对象存储(COS,Cloud Object Storage)可以通过腾讯云提供的 SDK 实现。以下是详细的步骤和示例代码,帮助您完成文件上传操作。


步骤

  1. 注册腾讯云账号并创建存储桶

    (1)登录腾讯云控制台,进入 对象存储 COS。(2)创建一个存储桶(Bucket),并获取存储桶的名称和所属地域(Region)。
  2. 获取 API 密钥

    在腾讯云控制台的 访问管理 中,获取您的 SecretId 和 SecretKey
  3. 添加腾讯云 COS SDK 依赖

    在项目中引入腾讯云 COS 的 Java SDK。
  4. 编写 Java 代码上传文件

    使用 SDK 提供的 API 上传文件到腾讯云 COS。

依赖库

在 Maven 项目pom.xml添加以下依赖:

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

示例代码

以下是一个完整的 Java 示例代码,演示如何将本地文件上传到腾讯云 COS:

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.exception.CosClientException;
import com.qcloud.cos.region.Region;
import lombok.extern.slf4j.Slf4j;/*** 腾讯cos文件上传工具类**/
@Slf4j
public class TencentCOSUtil {//创建链接public static COSClient getCOSClient() {try {// 1. 初始化用户身份信息(SecretId 和 SecretKey)String accessKey = "your accessKey";String secretKey = "your secretKey";COSCredentials cred = new BasicCOSCredentials(accessKey, secretKey);// 2. 设置存储桶的地域Region region = new Region("ap-guangzhou");ClientConfig clientConfig = new ClientConfig(region);// 创建COClient实例。return new COSClient(cred, clientConfig);} catch (Exception e) {throw new BusinessException("创建腾讯云OSS连接失败");}}}

  上传文件

/*** 上传文件。** @param inputStream 以流的方式上传文件* @param path        上传的文件存放路径* @param fileName    指定的文件名* @param suffix      上传的文件后缀* @return 文件在服务器上的全路径*/public static String upLoad(InputStream inputStream, String path, String fileName, String suffix, boolean signFlag) {if (inputStream == null) {return null;}String bucketName = "your bucketName";String endpoint = "your endpoint";String fileUrl = null;// 文件名格式SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.PURE_DATETIME_PATTERN);String newFileName = null;if (StrUtil.isNotBlank(fileName)) {newFileName = fileName + RandomUtil.randomString(5) + "." + suffix;} else {newFileName = sdf.format(new Date()) + RandomUtil.randomString(5) + "." + suffix;}String filePath = path + "/" + newFileName;fileUrl = endpoint + "/" + filePath;COSClient cosClient = getCOSClient();try {// 创建上传Object的MetadataObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setCacheControl("no-cache");objectMetadata.setHeader("Pragma", "no-cache");// 上传文件PutObjectResult putResult = cosClient.putObject(bucketName, filePath, inputStream, objectMetadata);if (putResult != null) {fileUrl = signFlag ? generatePresignedUrl(cosClient, fileUrl) : fileUrl;}} catch (CosClientException oe) {log.error(oe.getMessage());throw oe;} finally {cosClient.shutdown();}log.info("[cosUpLoad]文件全路径fileUrl={}", fileUrl);return fileUrl;}

文件签名及设置过期时间

public static String generatePresignedUrl(COSClient cosClient, String fileUrl) {String bucketName="your bucketName";if (StrUtil.isBlankIfStr(fileUrl)) {return fileUrl;}if (cosClient == null) {cosClient = getCOSClient();}// 设置URL过期时间Date expiration = DateUtil.offsetMinute(new Date(), 3);try {String filePath = new URL(fileUrl).getPath().substring(1);filePath = URLDecoder.decode(filePath, "UTF-8");// 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。URL url = cosClient.generatePresignedUrl(bucketName, filePath, expiration);return url.toString();} catch (CosClientException ce) {log.error("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with COS, "+ "such as not being able to access the network.");log.error("Error Message:" + ce.getMessage());} catch (MalformedURLException e) {log.error("[cosSignedUrl]文件地址格式有误", e);} catch (UnsupportedEncodingException e) {log.error("[cosSignedUrl]中文文件地址转换异常", e);} finally {if (cosClient != null) {cosClient.shutdown();}}return null;}

调用上传方法上传文件

public static void main(String[] args) {//从数据库查询业务数据List<UserData> projectList = new ArrayList<>();ByteArrayOutputStream out = new ByteArrayOutputStream();EasyExcel.write(out, UserData.class).sheet(0).doWrite(projectList);String fileUrl = null;try {fileUrl = TencentCOSUtil.upLoad(new ByteArrayInputStream(out.toByteArray()),"userData" + "/" + DateUtil.format(new Date(), "yyyy-MM"),"用户信息","xlsx", true);} catch (Exception e) {log.error("[userData]导出失败:", e);} finally {if (out != null) {try {out.close();} catch (IOException e) {log.error("[userData]关闭流失败", e);}}}if (fileUrl != null) {log.info("导出成功,文件fileUrl={}",fileUrl);}log.info("导出失败,文件fileUrl={}",fileUrl);}

代码说明

  1. 初始化身份信息

    使用 SecretId 和 SecretKey 创建 COSCredentials 对象。
  2. 设置存储桶地域

    根据存储桶的地域(如 ap-beijing)创建 ClientConfig 对象。
  3. 创建 COSClient

    使用 COSCredentials 和 ClientConfig 创建 COSClient 实例。
  4. 上传文件

    指定存储桶名称、本地文件路径和文件在 COS 上的存储路径(Key)。使用 PutObjectRequest 创建上传请求,并调用 cosClient.putObject() 方法上传文件。
  5. 关闭 COSClient

    上传完成后,调用 cosClient.shutdown() 关闭客户端。

关键参数

  • SecretId 和 SecretKey:腾讯云 API 密钥,用于身份验证。

  • BucketName:存储桶名称,格式为 <BucketName-APPID>,例如 examplebucket-1250000000

  • Region:存储桶所在地域,例如 ap-beijing(北京)。

  • Key:文件在 COS 上的存储路径,例如 uploads/file.txt


注意事项

  1. 权限设置

    (1)确保存储桶的权限设置为允许上传。(2)如果需要公开访问,可以设置文件的访问权限为公共读。
  2. 文件大小限制

    单个文件上传最大支持 5 TB。如果文件较大,建议使用分块上传(SDK 也支持分块上传 API)。
  3. 安全性

    不要将 SecretId 和 SecretKey 硬编码在代码中,建议使用环境变量或配置文件管理。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenSIPS-Dispatcher模块详解:优化SIP流量分发的利器

在 OpenSIPS 中&#xff0c;dispatcher 模块用于实现负载均衡和故障转移。通过 dispatcher 模块&#xff0c;你可以将 SIP 请求分发到一组后端服务器&#xff08;如媒体服务器、代理服务器等&#xff09;&#xff0c;并根据配置的算法和策略动态调整分发逻辑。 模块功能使用样…

09vue3实战-----引入element-plus组件库中的图标

09vue3实战-----引入element-plus组件库中的图标 1.安装2.引入3.优化 element-plus中的icon图标组件的使用和其他平台组件(如el-button按钮)是不一样的。 1.安装 npm install element-plus/icons-vue2.引入 在这我们只讲述最方便的一种引入方法------完整引入。这需要从elem…

Docker 部署 GitLab

一、下载镜像 docker pull gitlab/gitlab-ce 二、运行容器 docker run -d --name gitlab-20080 \n -p 20443:443 -p 20080:80 -p 20022:22 \n -v /wwwroot/opt/docker/gitlab-20080/etc:/etc/gitlab \n -v /wwwroot/opt/docker/gitlab-20080/log:/var/log/gitlab \n -v /www…

优惠券平台(十七):实现用户查询/取消优惠券预约提醒功能

业务背景 当用户预约了一个或多个优惠券抢购提醒后&#xff0c;如果不再需要提醒&#xff0c;可以取消预约通知。不过&#xff0c;虽然用户可以取消提醒&#xff0c;但已经发送到 MQ 的消息不会被撤回&#xff0c;消费者在时间点到达时依然会收到消息。此时&#xff0c;我们不…

【个人开发】macbook m1 Lora微调qwen大模型

本项目参考网上各类教程整理而成&#xff0c;为个人学习记录。 项目github源码地址&#xff1a;Lora微调大模型 项目中微调模型为&#xff1a;qwen/Qwen1.5-4B-Chat。 去年新发布的Qwen/Qwen2.5-3B-Instruct同样也适用。 微调步骤 step0: 环境准备 conda create --name fin…

深入理解进程优先级

目录 引言 一、进程优先级基础 1.1 什么是进程优先级&#xff1f; 1.2 优先级与系统性能 二、查看进程信息 2.1 使用ps -l命令 2.2 PRI与NI的数学关系 三、深入理解Nice值 3.1 Nice值的特点 3.2 调整优先级实践 四、进程特性全景图 五、优化实践建议 结语 引言 在操…

大数据学习之SparkSql

95.SPARKSQL_简介 网址&#xff1a; https://spark.apache.org/sql/ Spark SQL 是 Spark 的一个模块&#xff0c;用于处理 结构化的数据 。 SparkSQL 特点 1 易整合 无缝的整合了 SQL 查询和 Spark 编程&#xff0c;随时用 SQL 或 DataFrame API 处理结构化数据。并且支…

k8s的操作指令和yaml文件

一、项目的生命周期 创建----》发布----》更新----》回滚----》删除 1.创建 kubectl create deployment nginx1 --imagenginx:1.22 --replicas3 #基于deployment控制器创建pod&#xff0c;控制器的名称是nginx1,pod使用的镜像是nginx:1.22&#xff0c;pod的数量有3个 2.发布 ku…

解锁 DeepSeek 模型高效部署密码:蓝耘平台全解析

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

k8s部署rabbitmq

1. 创建provisioner制备器&#xff08;如果已存在&#xff0c;则不需要&#xff09; 1.1 编写nfs-provisioner-rbac.yaml配置文件 apiVersion: v1 kind: ServiceAccount metadata:name: nfs-client-provisionernamespace: wms --- kind: ClusterRole apiVersion: rbac.author…

评估大模型(LLM)摘要生成能力:方法、挑战与策略

大语言模型&#xff08;LLMs&#xff09;有着强大的摘要生成能力&#xff0c;为信息快速提取和处理提供了便利。从新闻文章的快速概览到学术文献的要点提炼&#xff0c;LLMs 生成的摘要广泛应用于各个场景。然而&#xff0c;准确评估这些摘要的质量却颇具挑战。如何确定一个摘要…

dmd-50

dmd-50 一、查壳 无壳&#xff0c;64位 二、IDA分析 main 下面的内容中数据经过R键转换&#xff0c;你就会知道v41的内容&#xff0c;以及是当v41成立时key是有效的。 v41870438d5b6e29db0898bc4f0225935c0 结合上面的函数知道&#xff1a;v41经过MD5解密后是key 注意是…

关于图像锐化的一份介绍

在这篇文章中&#xff0c;我将介绍有关图像锐化有关的知识&#xff0c;具体包括锐化的简单介绍、一阶锐化与二阶锐化等方面内容。 一、锐化 1.1 概念 锐化&#xff08;sharpening&#xff09;就是指将图象中灰度差增大的方法&#xff0c;一次来增强物体的轮廓与边缘。因为发…

全程Kali linux---CTFshow misc入门(38-50)

第三十八题&#xff1a; ctfshow{48b722b570c603ef58cc0b83bbf7680d} 第三十九题&#xff1a; 37换成1&#xff0c;36换成0&#xff0c;就得到长度为287的二进制字符串&#xff0c;因为不能被8整除所以&#xff0c;考虑每7位转换一个字符&#xff0c;得到flag。 ctfshow{5281…

vue3学习四

七 标签ref属性 设置标签ref属性&#xff0c;类似于设置标签id。 普通标签 <template name"test4"> <p ref"title" id"title" click"showinfo">VIEW4</p> <View3/><script lang"ts" setup>…

STM32 软件SPI读写W25Q64

接线图 功能函数 //写SS函数 void My_W_SS(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_4, (BitAction)BitValue); }//写SCK函数 void My_W_SCK(uint8_t BitValue) {GPIO_WriteBit(GPIOA, GPIO_Pin_5, (BitAction)BitValue); }//写MOSI函数 void My_W_MOSI(uint8_t Bit…

pytest-xdist 进行多进程并发测试

在自动化测试中&#xff0c;运行时间过长往往是令人头疼的问题。你是否遇到过执行 Pytest 测试用例时&#xff0c;整个测试流程缓慢得让人抓狂&#xff1f;别担心&#xff0c;pytest-xdist 正是解决这一问题的利器&#xff01;它支持多进程并发执行&#xff0c;能够显著加快测试…

CLion2024.3.2版中引入vector头文件报错

报错如下&#xff1a; 在MacBook端的CLion中引入#include <vector>报 vector file not found&#xff08;引入map、set等也看参考此方案&#xff09;&#xff0c;首先可以在Settings -> Build,Execution,Deployment -> Toolchains中修改C compiler和C compiler的路…

【RocketMQ 存储】- 同步刷盘和异步刷盘

文章目录 1. 前言2. 概述3. submitFlushRequest 提交刷盘请求4. FlushDiskWatcher 同步刷盘监视器5. 同步刷盘但是不需要等待刷盘结果6. 小结 本文章基于 RocketMQ 4.9.3 1. 前言 RocketMQ 存储部分系列文章&#xff1a; 【RocketMQ 存储】- RocketMQ存储类 MappedFile【Rock…

了解传输层TCP协议

目录 一、TCP协议段格式 二、TCP原理 1.确认应答 2.超时重传 3.连接管理 建立连接 断开连接 4.滑动窗口 5.流量控制 6.拥塞控制 7.延时应答 8.捎带应答 9.面向字节流 10.TCP异常情况 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如…