网站建设设计说明书,天猫商城网官网,男女性直接做的视频网站,购买营销型网站腾讯云COS介绍 腾讯云COS#xff08;Cloud Object Storage#xff09;是一种基于对象的存储服务#xff0c;用于存储和管理海量的非结构化数据#xff0c;如图片、音视频文件、备份数据等。它具有以下特点和优势#xff1a;
高可靠性#xff1a;采用分布式存储架构…腾讯云COS介绍 腾讯云COSCloud Object Storage是一种基于对象的存储服务用于存储和管理海量的非结构化数据如图片、音视频文件、备份数据等。它具有以下特点和优势
高可靠性采用分布式存储架构数据会在多个设备上进行冗余备份确保数据的高可靠性和持久性。弹性扩展支持根据业务需求自动扩展存储容量无需担心存储空间不足的问题。低成本提供按需计费方式用户只需支付实际使用的存储容量和数据传输流量无需预付费。安全性支持数据加密传输和存储保障数据的安全性和隐私性。简单易用提供简单的API接口和丰富的SDK方便开发者快速集成和使用。
此外腾讯云COS还广泛应用于以下场景
静态网站托管将网站的静态资源如HTML、CSS、JavaScript、图片等存储在COS中实现高可用、高性能的静态网站托管。大规模数据备份和归档提供高可靠性和低成本的存储服务适用于大规模数据备份和长期归档存储。音视频存储和处理支持存储和管理大规模的音视频文件并提供音视频处理服务如转码、截图、水印等。移动应用数据存储提供简单易用的API和SDK方便移动应用将用户数据、图片、文件等存储在云端。云原生应用存储可以作为云原生应用的对象存储服务存储应用程序的配置文件、日志文件、静态资源等。
总的来说腾讯云COS是一种高可靠、低成本、弹性扩展的云存储服务适用于各种需要存储和管理海量非结构化数据的场景。
一、前言
后台管理系统需要有图片等文字上传功能如图。 通过腾讯的OSS组件进行文件的上传。
二、实现步骤
1、pom文件引入腾讯云cos maven依赖 dependencygroupIdcom.qcloud/groupIdartifactIdcos_api/artifactIdversion${cos_api.version}/version/dependency
版本可使用 cos_api.version5.6.89/cos_api.version 2、编写配置类。获取cos的相关配置
相关配置包括域名、地域节点存储桶 秘钥等购买腾讯云时分配的信息。与及要上传的文件相关信息要求。
Data
Component
ConfigurationProperties(prefix oss.tencent)
public class TencentProperties {/**域名*/private String domain;/**地域节点*/private String region;/**存储桶名称*/private String bucketName;/**secretId*/private String secretId;/**secretKey*/private String secretKey;/**图片策略*/private String styleRule;/**缩略图策略*/private String thumbnailStyleRule;/**文件类型*/private ListString fileTypes;
}
3、文件上传下载处理类编写
Slf4j
Component(tencent)
public class TencentFileHandle implements FileStrategy {AutowiredTencentProperties tencentProperties;// 创建 COSClient 实例这个实例用来后续调用请求COSClient createCOSClient() {// 设置用户身份信息。// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理String secretId tencentProperties.getSecretId();String secretKey tencentProperties.getSecretKey();COSCredentials cred new BasicCOSCredentials(secretId, secretKey);// ClientConfig 中包含了后续请求 COS 的客户端设置ClientConfig clientConfig new ClientConfig();// 设置 bucket 的地域// COS_REGION 请参照 https://cloud.tencent.com/document/product/436/6224clientConfig.setRegion(new Region(tencentProperties.getRegion()));// 设置请求协议, http 或者 https// 5.6.53 及更低的版本建议设置使用 https 协议// 5.6.54 及更高版本默认使用了 httpsclientConfig.setHttpProtocol(HttpProtocol.https);// 以下的设置是可选的// 设置 socket 读取超时默认 30sclientConfig.setSocketTimeout(30*1000);// 设置建立连接超时默认 30sclientConfig.setConnectionTimeout(30*1000);// 如果需要的话设置 http 代理ip 以及 port
// clientConfig.setHttpProxyIp(httpProxyIp);
// clientConfig.setHttpProxyPort(80);// 生成 cos 客户端。return new COSClient(cred, clientConfig);}// 创建 TransferManager 实例这个实例用来后续调用高级接口TransferManager createTransferManager() {// 创建一个 COSClient 实例这是访问 COS 服务的基础实例。// 详细代码参见本页: 简单操作 - 创建 COSClientCOSClient cosClient createCOSClient();// 自定义线程池大小建议在客户端与 COS 网络充足例如使用腾讯云的 CVM同地域上传 COS的情况下设置成16或32即可可较充分的利用网络资源// 对于使用公网传输且网络带宽质量不高的情况建议减小该值避免因网速过慢造成请求超时。ExecutorService threadPool Executors.newFixedThreadPool(32);// 传入一个 threadpool, 若不传入线程池默认 TransferManager 中会生成一个单线程的线程池。TransferManager transferManager new TransferManager(cosClient, threadPool);// 设置高级接口的配置项// 分块上传阈值和分块大小分别为 5MB 和 1MBTransferManagerConfiguration transferManagerConfiguration new TransferManagerConfiguration();transferManagerConfiguration.setMultipartUploadThreshold(5*1024*1024);transferManagerConfiguration.setMinimumUploadPartSize(1*1024*1024);transferManager.setConfiguration(transferManagerConfiguration);return transferManager;}void shutdownTransferManager(TransferManager transferManager) {// 指定参数为 true, 则同时会关闭 transferManager 内部的 COSClient 实例。// 指定参数为 false, 则不会关闭 transferManager 内部的 COSClient 实例。transferManager.shutdownNow(true);}Overridepublic UploadDto upload(MultipartFile file) throws Exception {return upload(file, null);}Overridepublic UploadDto upload(MultipartFile file, String filePath) throws Exception {//文件名String fileFullName FileUtil.getName(file.getOriginalFilename());InputStream inputStream file.getInputStream();return upload(inputStream, fileFullName, filePath);}public UploadDto upload(InputStream inputStream, String fileFullName, String filePath) throws Exception {if (inputStream null) {throw new Exception(上传文件不能为空);}TransferManager transferManager createTransferManager();String bucketName tencentProperties.getBucketName();//int inputStreamLength 1024 * 1024;
// byte data[] new byte[inputStreamLength];
// InputStream inputStream new ByteArrayInputStream(data);ObjectMetadata objectMetadata new ObjectMetadata();// 上传的流如果能够获取准确的流长度则推荐一定填写 content-length// 如果确实没办法获取到则下面这行可以省略但同时高级接口也没办法使用分块上传了//objectMetadata.setContentLength(inputStreamLength);try {//时间戳String timestamp String.valueOf(System.currentTimeMillis());//文件扩展名String extension FileUtil.getSuffix(fileFullName);String fileName FileUtil.getPrefix(fileFullName);ListString fileTypes tencentProperties.getFileTypes();if(fileTypes ! null) {boolean flag fileTypes.contains(extension);Assert.isTrue(flag, 不支持上传的文件类型 extension);}String upFilePath StringUtils.join(fileName, _, timestamp, ., extension);if(filePath ! null) {upFilePath StringUtils.join(filePath, /, upFilePath);}String key upFilePath;PutObjectRequest putObjectRequest new PutObjectRequest(bucketName, key, inputStream, objectMetadata);// 高级接口会返回一个异步结果Upload// 可同步地调用 waitForUploadResult 方法等待上传完成成功返回UploadResult, 失败抛出异常Upload upload transferManager.upload(putObjectRequest);UploadResult uploadResult upload.waitForUploadResult();if (uploadResult null) {log.error(上传附件到腾讯云失败 fileName{}, upFilePath);throw new Exception(上传附件 upFilePath 到腾讯云失败 );}log.info(cos fileName: upFilePath);//返回上传结果UploadDto uploadDto new UploadDto();uploadDto.setName(upFilePath);
// uploadDto.setKey(upFilePath);uploadDto.setCreateTime(DateUtil.date());return uploadDto;} catch (Exception e) {log.error(cos 上传失败, e);throw new RuntimeException(文件fileFullName 上传失败);} finally {shutdownTransferManager(transferManager);}}Overridepublic byte[] download(String key) throws Exception {return null;}Overridepublic void delete(String key) {}}
4、图片相关信息类
Data
public class UploadDto implements Serializable {/*** */private static final long serialVersionUID 1L;/**图片名*/private String name;/**图片路径*/private String imgUrl;
// /**key*/
// private String key;
// /**图片跳转路径*/
// private String targetUrl;/**上传日期*/JsonFormat(pattern yyyy-MM-dd)private Date createTime;
}
5、调用
/*** 图片上传* 图片上传至OSS** param file 文件流* return ResponseDataUploadDto* throws Exception*/ApiOperation(value 图片上传至OSS, notes 图片上传至OSS)PostMapping(upload)public ResponseDataUploadDto upload(RequestPart(file) MultipartFile file, RequestHeader(nameossType) String ossType) throws Exception {
// Assert.notNull(ossType, 资源类型不能为空);if (file.getSize()/1024 10*1024) {return ResponseData.error(资源为: (file.getSize()/1024/1024) M,大小超出限制的10M);}OssTypeEnum ossTypeEnum null;try {if(ossType ! null)ossTypeEnum OssTypeEnum.valueOf(ossType);} catch (RuntimeException e) {return ResponseData.error(资源类型不存在 ossType);}//上传至OSSUploadDto dto uploadService.upload(file, ossTypeEnum);if (ObjectUtil.isNotEmpty(dto)) {return ResponseData.success(dto);} else {log.error(MShuffleConstant.UPLOAD_FAILED);return ResponseData.error(MShuffleConstant.UPLOAD_FAILED);}}
相关配置说明
腾讯云COSCloud Object Storage的配置主要涉及到创建存储桶、设置访问权限、配置数据传输等方面。以下是一个基本的腾讯云COS配置说明
创建存储桶首先你需要在腾讯云COS控制台中创建一个或多个存储桶用于存储你的数据。存储桶是COS中用于存储对象的容器你可以根据业务需求创建不同的存储桶来组织和管理你的数据。设置访问权限为了保护你的数据安全你需要为存储桶设置适当的访问权限。COS提供了多种访问权限控制方式包括基于身份的访问控制IAM、存储桶策略、预签名URL等。你可以根据实际需求选择适合的权限控制方式确保只有授权的用户或应用程序能够访问你的数据。配置数据传输如果你的数据需要从其他地方传输到COS你可以配置数据传输任务。COS支持多种数据传输方式包括使用COS的迁移工具、通过API接口上传数据、使用SDK进行数据传输等。你可以根据你的数据来源和目标选择适合的数据传输方式。启用数据处理功能COS还提供了一些数据处理功能如图片处理、音视频处理等。如果你需要对这些类型的数据进行处理可以在COS控制台中启用相应的处理功能并配置相应的处理规则。