腾讯云COS对象存储
一、腾讯云COS
腾讯云对象存储 COS 是一种存储海量数据的分布式存储服务。COS 提供了多种对象的存储类型:标准存储、低频存储、归档存储。
二、为什么要使用TA
- 便宜;
- 个人用户有6个月的免费使用额度50G;
- 有客户端COSBrowser ,提供图形化操作;
- 可以设置跨域、防盗链;
- 可以进行静态网站托管;
- 支持https访问;
- CDN加速,下载速度大幅提高。
以上就是我使用它的原因。
三、开始对接
1、添加SDK
<!-- 腾讯云cos_api -->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.4.10</version>
</dependency>
<!-- java开发工具包 https://www.hutool.club/docs/#/ -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.13</version>
</dependency>
2、编写工具类
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.thread.ThreadUtil;
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.model.*;
import com.qcloud.cos.region.Region;
import com.qcloud.cos.transfer.Copy;
import com.qcloud.cos.transfer.Download;
import com.qcloud.cos.transfer.TransferManager;
import com.qcloud.cos.transfer.Upload;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.concurrent.ExecutorService;
/**
* 腾讯云对象存储cos帮助类
*
* @author lixingwu
*/
public class TxCosUtils {
/*配置参数自行填写*/
private static final String APP_ID = "";
private static final String SECRET_ID = "";
private static final String SECRET_KEY = "";
private static final String REGION_NAME = "";
private TxCosUtils() {
}
/**
* 方法描述:获取cos存储桶客户端.
* 创建时间:2019-02-27 18:09:46
*
* @author "lixingwu"
*/
private static COSClient getCOSClient() {
// 1 初始化用户身份信息(secretId, secretKey)。
COSCredentials cred = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
// 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
// clientConfig中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者接口文档 FAQ 中说明。
ClientConfig clientConfig = new ClientConfig(new Region(REGION_NAME));
// 3 生成 cos 客户端。
return new COSClient(cred, clientConfig);
}
/**
* 方法描述:bucket 的命名规则为{name}-{appid} ,
* name 仅支持小写字母、数字和 - 的组合,不能超过40字符.
* 创建时间:2019-02-27 18:09:46
*
* @author "lixingwu"
*/
private static String getBucketName(String bucketName) {
Validator.validateNotEmpty(bucketName, "bucketName不能为空");
Validator.validateMatchRegex("^[a-z!-@0-9]+$", bucketName,
"bucketName仅支持小写字母、数字和 - 的组合");
if (bucketName.length() > 40) {
throw new ValidateException("bucketName不能超过40字符");
}
return (bucketName + "-" + APP_ID);
}
/**
* 方法描述:创建一个存储桶.
* 创建时间:2019-02-27 18:09:46
*
* @author "lixingwu"
*/
public static Bucket createBucket(String bucketName) throws CosClientException {
Bucket bucket = null;
COSClient client = getCOSClient();
bucket = createBucket(getBucketName(bucketName));
//设置存储桶的权限为 公有读私有写
if (null != bucket) {
client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
}
return bucket;
}
/**
* 方法描述:获取存储桶列表.
* 创建时间:2019-02-27 18:09:46
*
* @author "lixingwu"
*/
public static List<Bucket> listBuckets() throws CosClientException {
return getCOSClient().listBuckets();
}
/**
* 方法描述:检测存储桶是否存在.
* 创建时间:2019-02-27 18:09:46
*
* @author "lixingwu"
*/
public static boolean doesBucketExist(String bucketName) throws CosClientException {
return getCOSClient().doesBucketExist(getBucketName(bucketName));
}
/**
* 方法描述:删除文件.
* 创建时间:2019-03-05 14:25:08
* 创建作者:李兴武
*
* @param bucketName bucketName
* @param fileName 文件地址
* @throws CosClientException the cos client exception
* @author "lixingwu"
*/
public static void deleteObject(String bucketName, String fileName)
throws CosClientException {
getCOSClient().deleteObject(bucketName, fileName);
}
/**
* 方法描述:获取文件的信息.
* 创建时间:2019-03-05 14:54:09
* 创建作者:李兴武
*
* @param bucketName bucketName
* @param fileName 文件地址
* @return the object metadata
* @throws CosClientException the cos client exception
* @author "lixingwu"
*/
public static ObjectMetadata findObjectMetadata(String bucketName, String fileName)
throws CosClientException {
return getCOSClient().getObjectMetadata(getBucketName(bucketName), fileName);
}
/**
* 方法描述:获取一个高级的API TransferManager,项目中应该使用这些接口.
* 创建时间:2019-03-05 15:35:12
* 创建作者:李兴武
*
* @return the transfer manager
* @author "lixingwu"
*/
public static TransferManager cosTransferManager() {
ExecutorService threadPool = ThreadUtil.newExecutor();
return new TransferManager(getCOSClient(), threadPool);
}
/**
* 方法描述:上传文件
* 创建时间:2019-03-05 15:53:54
* 创建作者:李兴武
*
* @param bucketName 存储桶名称
* @param filePath 文件存储地址
* @param stream 文件流
* @return the upload
* @author "lixingwu"
*/
public static Upload upload(String bucketName, String filePath, InputStream stream) {
TransferManager manager = cosTransferManager();
Upload result = null;
try {
result = manager.upload(getBucketName(bucketName), filePath, stream, new ObjectMetadata());
result.waitForUploadResult();
} catch (CosClientException | InterruptedException e) {
e.printStackTrace();
} finally {
manager.shutdownNow();
}
return result;
}
/**
* 方法描述:下载文件.
* 创建时间:2019-03-05 16:20:16
* 创建作者:李兴武
*
* @param bucketName 存储桶名称
* @param filePath 文件存储地址
* @param destFile 存储到的本地目标文件
* @return the download
* @author "lixingwu"
*/
public static Download download(String bucketName, String filePath, File destFile) {
TransferManager manager = cosTransferManager();
Download download = null;
try {
download = manager.download(getBucketName(bucketName), filePath, destFile);
download.waitForCompletion();
} catch (CosClientException | InterruptedException e) {
e.printStackTrace();
} finally {
manager.shutdownNow();
}
return download;
}
/**
* 方法描述:复制文件-不同存储桶.
* 创建时间:2019-03-05 16:28:11
* 创建作者:李兴武
*
* @param srcBucketName 源存储桶名称
* @param srcKey 源文件地址
* @param destBucketName 目标存储桶名称
* @param destKey 目标件地址
* @return the copy
* @author "lixingwu"
*/
public static Copy copy(String srcBucketName, String srcKey, String destBucketName, String destKey) {
TransferManager manager = cosTransferManager();
Copy copy = null;
try {
copy = manager.copy(getBucketName(srcBucketName), srcKey, getBucketName(destBucketName), destKey);
copy.waitForCompletion();
} catch (CosClientException | InterruptedException e) {
e.printStackTrace();
} finally {
manager.shutdownNow();
}
return copy;
}
/**
* 方法描述:复制文件-同存储桶.
* 创建时间:2019-03-05 16:28:11
* 创建作者:李兴武
*
* @param bucketName 源存储桶名称
* @param srcKey 源文件地址
* @param destKey 目标件地址
* @return the copy
* @author "lixingwu"
*/
public static Copy copy(String bucketName, String srcKey, String destKey) {
return copy(bucketName, srcKey, bucketName, destKey);
}
/*测试*/
public static void main(String[] args) throws IOException {
// Bucket bucket = TxCosUtils.createBucket("test");
// List<Bucket> listBuckets = TxCosUtils.listBuckets();
// boolean test = TxCosUtils.doesBucketExist("web-js-css01");
// File file = new File("E:\\codeList01.html");
// BufferedInputStream stream = FileUtil.getInputStream(file);
// PutObjectResult result = TxCosUtils.putObject("test", "html/codeList01.html", stream);
// COSObject test = downObject("test", "html/codeList.html");
// COSObjectInputStream inputStream = test.getObjectContent();
// ObjectMetadata test = downObject("test", "html/codeList.html", new File("E:\\codeList.xml"));
// ObjectMetadata metadata = findObjectMetadata("test", "html/codeList.html");
// CopyObjectResult result = TxCosUtils.copyObject("web-js-css", "css/ch233.min.css", "test", "css/ch233.min.css");
// CopyObjectResult result = TxCosUtils.copyObject("test", "css/ch233.min.css", "css/ch233.min.css.bak");
// deleteObject(getBucketName("test"), "html/codeList01.html");
// 高级API
// 上传文件
// File file = new File("E:\\templet.html");
// BufferedInputStream stream = FileUtil.getInputStream(file);
// Upload test = TxCosUtils.upload("test", "html/templet.html", stream);
// Console.log(test);
// 下载文件
// Download test = TxCosUtils.download("test", "css/ch233.min.css.bak", new File("E:\\ch233.min.css"));
// Console.log(test);
// 复制文件
// Copy copy = TxCosUtils.copy("web-js-css", "layui/layui.js", "test", "layui/layui.js");
// Copy copy = TxCosUtils.copy("test", "layui/layui.js", "layui/layui.js.bak");
// Console.log(copy);
}
}
腾讯云COS对象存储的更多相关文章
- Go操作腾讯云COS对象存储的简单使用案例
准备环境 安装Go环境 Golang:用于下载和安装 Go 编译运行环境,请前往 Golang 官网进行下载 安装SDK go get -u github.com/tencentyun/cos-go- ...
- 腾讯云COS对象存储 Web 端直传实践(JAVA实现)
使用 腾讯云COS对象存储做第三方存储云服务,把一些文件都放在上面,这里主要有三中实现方式:第一种就是在控制台去设置好,直接上传文件.第二种就是走服务端,上传文件,就是说,上传文件是从服务端去上传上去 ...
- 腾讯云COS对象存储占据数据容灾C位
说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...
- 腾讯云 COS 对象存储使用
目前使用腾讯云的对象存储cos服务,将本地的文件同步到cos中,看了腾讯云的用户文档,发现使用COS Migration 工具还是挺适合的. 原因 因为服务器已经安装有java环境,而cos的几个用户 ...
- 腾讯云COS对象存储的简单使用
叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的高清大图上去,现将其上传的简单使用步骤总结一波(其它操作参加官方SDK文档API) ...
- 腾讯云的对象存储COS
什么是对象存储COS Clound Object Storage,COS,专门为企业和开发者们提供能够存储海量的分布式存储服务,用户可以随时通过互联网对大量数据进行批量存储和处理,在任意位置存储和检索 ...
- 腾讯云cos对象在线显示
问题 前端使用了一张cos的图片,但是无法显示图片,使用的是cdn的加速域名地址. 对比:使用服务器的直接域名是可以显示的. 两者地址直接访问时,一者在线显示,一者直接下载到本地. 原因: 使用默认提 ...
- PHP 腾讯云cos使用之我见
因为某些人的原因,本文从新改名发布一遍. 原名称:tp5 -- 腾讯云cos简单使用 原文链接:https://www.cnblogs.com/YFYQ/p/10840050.html 因项目需要,本 ...
- tp5 -- 腾讯云cos简单使用
因项目需要,本来是需要对接阿里云oss,但因客户错误将云存储买成腾讯云cos,因此简单做了个对象上传使用 首先下载cos的sdk: 三种方式在文档上面都有介绍 SDK 安装有三种方式:Composer ...
随机推荐
- JS高阶编程技巧--柯理化函数
首先看一段代码: let obj = { x: 100 }; function fn(y) { this.x += y; console.log(this); } 现在有一个需求:在1秒后,执行函数f ...
- 小白的linux笔记4:几种共享文件方式的速度测试——SFTP(SSH)/FTP/SMB
测试一下各个协议的速度,用一个7205M的centos的ISO文件上传下载.5Gwifi连接时,本地SSD(Y7000)对服务器的HDD: smb download 23M/s(资源管理器) smb ...
- CF1311E Construct the Binary Tree
膜这场比赛的 \(rk1\) \(\color{black}A\color{red}{lex\_Wei}\) 这题应该是这场比赛最难的题了 容易发现,二叉树的下一层不会超过这一层的 \(2\) 倍,所 ...
- Android开发中按钮的语法
按钮的主要作用就是触发一个动作,所以会用到监听器. 如何为按钮添加单机事件监听器: 1.匿名内部类作为单机事件监听器 案例: 首先在.xml文件中添加一个按钮一,然后设置其id属性,然后在main里获 ...
- Jean-Pierre Serre访问录
问:是什么使您以数学为职业的? 答:我记得大概是从七.八岁时起喜欢数学的.在中学里, 我常做一些高年级的题目.那时,我寄宿于Nimes,与比我大的孩子住在一起,他们常常欺侮我,为了平抚他们,我就经常帮 ...
- Go String
在 Go 语言中, 字符串是基础数据类型之一, 关键字为 string. 变量声明 字符串变量的声明如下: // 声明一个字符串类型的变量 s, 未赋予初始值时默认为零值"" va ...
- 如何在vue-cli中使用vuex(配置成功
前言 众所周知,vuex 是一个专为 vue.js 应用程序开发的状态管理模式,在构建一个中大型单页应用中使用vuex可以帮助我们更好地在组件外部管理状态.而vue-cli是vue的官方脚手架,它能帮 ...
- SpringBoot从1.5.1→2.2.4项目加包扫雷一:Error:(8, 44) java: 程序包org.springframework.boot.web.support不存在
更换成新包即可import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
- 【巨杉数据库SequoiaDB】巨杉Tech | “删库跑路”又出现,如何防范数据安全风险?
最近,又双叕有企业被“删库”了.来自微盟官网的消息,微盟的业务系统数据库(包括主备)遭遇其公司运维人员的删除,系统将停止运营超48小时. 频发的类似事件也让大家对于数据安全的关注不断提高.数据是一个科 ...
- Python3中的支持向量机SVM的使用(有实例)
https://www.cnblogs.com/luyaoblog/p/6775342.html 首先,我们需要安装scikit-learn 一.导入sklearn算法包 在python中导入sci ...