冷知识:COS上传文件时可以同步获取文件信息

 背景介绍

本文将介绍如何在上传文件到 COS 时同步获取文件信息,如图片的宽高、格式等。

目前,可以通过 COS 上传接口,如 PUT Object、CompleteMultipartUploads 等将文件存储至 COS 存储桶中,我们针对以下三种场景提供上传时同步获取文件信息的方式:

图片

ReturnBody 是 COS 对外提供的一种获取文件信息的方式。在上传请求(PUT Object、POST Object、CompleteMultipartUploads)中携带 x-cos-return-body 头部,传入自定义的 ReturnBody 参数,便可在请求响应结果中获取到文件信息 。

Pic-Operations 是上传时的一个请求包头,在上传请求(PUT Object、POST Object、CompleteMultipartUploads)中携带该包头并设置需要返回原图信息的参数,就可在图片上传至 COS 时同步获取原图信息。

说明  Pic-Operations 是由数据万象服务提供的获取图片信息的能力,使用时会产生图片基础处理费用。

主要流程如下图所示:

图片

 场景一:同步获取文件元信息

如需要在上传文件后,同步获取文件元信息,可以通过 ReturnBody 实现。在上传请求头部中携带由文件元信息组成的 ReturnBody 参数,便可在请求响应结果中获取到文件元信息。

ReturnBody 提供以下文件元信息参数

图片

使用时,需要先自定义构造 ReturnBody 参数,这是您希望在返回结果中获取到的文件元信息。

注意   ReturnBody 参数的 key 可以自定义名称,value 必须跟上述 ReturnBody 提供的变量名保持一致。

请求示例

// ReturnBody 参数的 key 可以自定义名称,value 必须跟 ReturnBody 提供的变量保持一致
{
"bucket": "${bucket}",
"key": "${object}",
"filesize": "${size}",
"mime_type": "${mimeType}"
}

再将 ReturnBody 参数转换为字符串,并进行 URL 安全的 Base64 编码,可以得到:

eyJidWNrZXQiOiIke2J1Y2tldH0iLCJrZXkiOiIke29iamVjdH0iLCJmaWxlc2l6ZSI6IiR7c2l6ZX0iLCJtaW1lX3R5cGUiOiIke21pbWVUeXBlfSJ9
 

之后便可在上传文件的请求中,通过设置请求头部 x-cos-return-body 传入上面 Base64 编码后的结果,即可在请求响应中获取到自定义的 bucket、key、filesize、mime_type 文件信息。

响应示例


HTTP/1.1 200 OK
x-cos-request-id: NWU5MDNkZjVfYzVjNzJhMDlfMjVhNzNfMWMy****


{
"bucket":"examplebucket-1250000000000",
"filesize":"30262104",
"key":"test.pptx",
"mime_type":"application/vnd.openxmlformats-officedocument.presentationml.presentation"
}

 场景二:同步获取图片信息

如需要在上传图片文件后,同步获取图片信息,有两种实现方式:通过 ReturnBody 同步获取图片信息 和 通过 Pic-Operations 同步获取图片信息。同步获取图片信息后,可以用于后续处理,如给图片分类、打标签等操作。

注意

1. 两种实现方式都依赖数据万象(Cloud Infinite,CI)服务的能力。使用前需先开通数据万象并绑定存储桶,可参考 存储桶操作。

2. 获取图片信息会由 CI 服务收取基础图片处理费用,详情可参考  图片处理费用 。

方式一:通过 ReturnBody 同步获取图片信息

通过 ReturnBody 同步获取图片信息的方式,需要在上传请求头部中携带由图片信息组成的 ReturnBody 参数,便可在请求响应结果中获取到图片信息。

说明   当前仅支持在中国大陆公有云地域使用。

ReturnBody 提供的图片信息包括:图片基本信息(imageInfo)和图片 exif 信息。

其中,图片基本信息(imageInfo)包括:

图片

图片 exif 信息主要是记录拍摄的硬件或软件信息,包含但不限于以下几项:

图片

使用时,仍需根据 ReturnBody 提供的图片信息先自定义构造  ReturnBody 参数。为了避免 ReturnBody 携带的内容太多,影响接口性能,不支持直接填写${imageInfo}或${exif},必须写明具体的子变量,例如${变量名.子变量}、${变量名.二级子变量}。

注意

ReturnBody 参数的 key 可以自定义名称,value 必须跟上述 ReturnBody 提供的变量名保持一致。

请求示例


// ReturnBody 参数的 key 可以自定义名称,value 必须跟 ReturnBody 提供的变量保持一致
{
"color_space": "${exif.ColorSpace.val}",
"format": "${imageInfo.format}",
"width": "${imageInfo.width}",
"height": "${imageInfo.height}",
"md5": "${imageInfo.md5}",
"bit_depth": "${imageInfo.bit_depth}",
"vertical_dpi": "${imageInfo.vertical_dpi}",
"horizontal_dpi": "${imageInfo.horizontal_dpi}"
}

再将 ReturnBody 参数转换为字符串,并进行 URL 安全 的 Base64 编码,可以得到:

eyJjb2xvcl9zcGFjZSI6IiR7ZXhpZi5Db2xvclNwYWNlLnZhbH0iLCJmb3JtYXQiOiIke2ltYWdlSW5mby5mb3JtYXR9Iiwid2lkdGgiOiIke2ltYWdlSW5mby53aWR0aH0iLCJoZWlnaHQiOiIke2ltYWdlSW5mby5oZWlnaHR9IiwibWQ1IjoiJHtpbWFnZUluZm8ubWQ1fSIsImJpdF9kZXB0aCI6IiR7aW1hZ2VJbmZvLmJpdF9kZXB0aH0iLCJ2ZXJ0aWNhbF9kcGkiOiIke2ltYWdlSW5mby52ZXJ0aWNhbF9kcGl9IiwiaG9yaXpvbnRhbF9kcGkiOiIke2ltYWdlSW5mby5ob3Jpem9udGFsX2RwaX0ifQ

之后便可在上传文件的请求中,通过设置请求头部 x-cos-return-body 传入上面 Base64 编码后的结果,即可在请求响应中获取到自定义的 color_space、format、width、height 等图片信息。

响应示例
HTTP/1.1 200 OK
x-cos-request-id: NWU5MDNkZjVfYzVjNzJhMDlfMjVhNzNfMWMy****


{
"bit_depth":"8",
"color_space":"sRGB",
"format":"png",
"height":"800",
"horizontal_dpi":"0",
"md5":"4f5c260f63af3c56cea542a1c62a0a1b",
"vertical_dpi":"0",
"width":"1200"
}

方式二:通过 Pic-Operations 同步获取图片信息

通过 Pic-Operations 同步获取图片信息的方式,只需要在请求包头部中加入 Pic-Operations 项并设置需要返回原图信息参数,就可在图片上传至 COS 后同步获取原图信息。

通过 putObject 上传图片,请求头中设置 Pic-Operations,设置 is_pic_info 为 1,代表返回原图信息。在请求结果中可以拿到原图图片信息。

请求示例

PUT /filename.jpg HTTP/1.1
Host: examplebucket-1250000000.cos.ap-chengdu.myqcloud.com
Date: Tue, 04 Apr 2023 09:06:15 GMT
Authorization:XXXXXXXXXXXX
Pic-Operations: {"is_pic_info":1}
Content-Length: 64


[Object]

响应示例


HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: 645
Date: Tue, 04 Apr 2023 09:06:16 GMT
Status: 200 OK
x-cos-request-id: NWFjMzQ0MDZfOTBmYTUwXzZkZV8z****


<UploadResult>
      <OriginalInfo>
          <Key>filename.jpg</Key>
          <Location>examplebucket-1250000000.cos.ap-chengdu.myqcloud.com/filename.jpg</Location>
          <ETag>&quot;580cd6930444576523c25f86ce2af9b1fc2d5484&quot;</ETag>
          <ImageInfo>
              <Format>JPEG</Format>
              <Width>640</Width>
              <Height>427</Height>
              <Quality>100</Quality>
              <Ave>0xa18454</Ave>
              <Orientation>1</Orientation>
              <FrameCount>1</FrameCount>
          </ImageInfo>
      </OriginalInfo>
</UploadResult>

说明

1. Pic-Operations 支持 COS V5 的分块上传同步获取图片信息,在使用 COS V5 的 Complete Multipart Upload 接口时只需在请求包头部中加入 Pic-Operations 项,在分片上传完成后可以在请求结果中获取到图片信息。

2. Pic-Operations 只能在数据万象支持的地域使用。

3. 仅支持 32M 以内的图片。

 场景三:同步获取媒体文件信息

注意

通过 ReturnBody 同步获取媒体文件信息依赖数据万象(Cloud Infinite,CI)服务的媒体处理功能。使用前需先开通数据万象并绑定存储桶,并开启媒体处理功能开关。获取媒体文件信息会由 CI 服务收取视频元信息获取费用 。

如需要在上传媒体文件后,同步获取媒体文件信息,可以通过 ReturnBody 实现。在上传请求头部中携带由媒体文件信息组成的 ReturnBody 参数,便可在请求响应结果中获取到媒体文件信息。

说明 

当前仅支持在中国大陆公有云地域使用。

ReturnBody 提供的媒体文件信息主要内容可参考下表 。

图片

使用时,仍需根据 ReturnBody 提供的媒体文件信息先自定义构造  ReturnBody 参数。为了避免 ReturnBody 携带的内容太多,影响接口性能,不支持直接填写${videoInfo},必须写明具体的子变量,例如${变量名.子变量}、${变量名.二级子变量}。

注意   ReturnBody 参数的 key 可以自定义名称,value 必须跟上述 ReturnBody 提供的变量名保持一致。

请求示例


// ReturnBody 参数的 key 可以自定义名称,value 必须跟 ReturnBody 提供的变量保持一致
{
"video_bit_rate": "${videoInfo.video.bit_rate}",
"video_codec_name": "${videoInfo.video.codec_name}",
"video_profile": "${videoInfo.video.profile}",
"video_pix_fmt": "${videoInfo.video.pix_fmt}",
"audio_bit_rate": "${videoInfo.audio.bit_rate}",
"audio_codec_name": "${videoInfo.audio.codec_name}",
"duration": "${videoInfo.format.duration}",
}

再将 ReturnBody 参数转换为字符串,并进行 URL 安全 的 Base64 编码,可以得到:


eyJ2aWRlb19iaXRfcmF0ZSI6IiR7dmlkZW9JbmZvLnZpZGVvLmJpdF9yYXRlfSIsInZpZGVvX2NvZGVjX25hbWUiOiIke3ZpZGVvSW5mby52aWRlby5jb2RlY19uYW1lfSIsInZpZGVvX3Byb2ZpbGUiOiIke3ZpZGVvSW5mby52aWRlby5wcm9maWxlfSIsInZpZGVvX3BpeF9mbXQiOiIke3ZpZGVvSW5mby52aWRlby5waXhfZm10fSIsImF1ZGlvX2JpdF9yYXRlIjoiJHt2aWRlb0luZm8uYXVkaW8uYml0X3JhdGV9IiwiYXVkaW9fY29kZWNfbmFtZSI6IiR7dmlkZW9JbmZvLmF1ZGlvLmNvZGVjX25hbWV9IiwiZHVyYXRpb24iOiIke3ZpZGVvSW5mby5mb3JtYXQuZHVyYXRpb259In0

之后便可在上传文件的请求中,通过设置请求头部 x-cos-return-body 传入上面 Base64 编码后的结果,即可在请求响应中获取到自定义的 video_bit_rate、video_codec_name、video_profile 等媒体文件信息。

响应示例
HTTP/1.1 200 OK
x-cos-request-id: NWU5MDNkZjVfYzVjNzJhMDlfMjVhNzNfMWMy****


{
"audio_bit_rate":"189.375000",
"audio_codec_name":"aac",
"duration":"123.875000",
"video_bit_rate":"2936.675000",
"video_codec_name":"h264",
"video_pix_fmt":"yuv420p",
"video_profile":"Main"
}

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

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

相关文章

HubSpot社交媒体影响力怎么样?

HubSpot是一家在数字营销和销售领域非常知名的公司&#xff0c;以其全面的营销、销售和客户服务软件而闻名。然而&#xff0c;关于HubSpot在社交媒体上的具体影响力&#xff0c;这是一个动态的情况&#xff0c;因为社交媒体的影响力可能受到多种因素的影响&#xff0c;包括社交…

如何处理QT 代码复制到新机器无法正确打开和编译?

例如你在文件夹 d:\projects 下创建的项目名称为 hello&#xff0c;这时会在 d:\projects 下创建两个文件夹 d:\projects\hello 和 d:\projects\build-hello-Desktop_Qt_6_6_1_MinGW_64_bit-Debug。其中&#xff0c;第二个文件夹保存了编译器等工具软件的路径设置。 第二个文件…

ubuntu 22安装配置并好安全加固后,普通用户一直登录不上

现象 ubuntu 22安装配置并好安全加固后&#xff0c;普通用户一直登录不上 排查报错 查看日志/var/log/auth.log发现报错 Jan 30 15:49:57 aiv-O-E-M sshd[62570]: PAM unable to dlopen(pam_tally2.so): /lib/security/pam_tally2.so: cannot open shared object file: No …

C语言 | 求最大/小值小技巧:fmax、fmin函数

如果你只是因为不想用C语言手写max、min函数&#xff0c;就直接去用iostream中的max、min函数的话&#xff0c;这篇文章可能会有些许帮助。 &#x1f607; fmax、fmin函数用于确定两个指定值的较大/较小值。 头文件 math.h&#xff08;或者cmath&#xff09;。 定义 double …

【Python笔记-设计模式】单例模式

一、说明 单例是一种创建型设计模式&#xff0c;能够保证一个类只有一个实例&#xff0c; 并提供一个访问该实例的全局节点。 (一) 解决问题 维护共享资源&#xff08;数据库或文件&#xff09;的访问权限&#xff0c;避免多个实例覆盖同一变量&#xff0c;引发程序崩溃。 …

部署PXE高效批量网络装机

部署PXE高效批量网络装机 因在Cisco3850核心交换机中已开启DHCP 服务&#xff0c;因此不需要在配置DHCP服务。如果您的网络环境中也已有DHCP服务&#xff0c;也不用再配置DHCP服务了&#xff0c;直接部署PXE相关服务即可。 找一台linux系统的服务器&#xff0c;这本次试验用的是…

什么是零知识证明?

Web3 的核心原则之一——透明度&#xff0c;也可能是其最大的缺点之一。没有人希望他们的所有在线活动&#xff08;从金融交易到个人身份数据&#xff09;都可供任何人公开查看。为了使区块链能够扩展并变得更容易访问&#xff0c;隐私必须成为首要任务。 零知识证明能够改变我…

Codeforces Round 894 (Div. 3)

Gift Carpet&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;有一块儿地毯&#xff0c;上面有n行m列的字符&#xff0c;如果从左往右一列一列的读&#xff0c;可以读到“vika”&#xff0c;那么就输出yes&#xff0c;否则输出no。 思路&#xff1a;这…

【RuoYi-Vue-Plus学习】项目初始化时将sql导入数据库出现Finished with error解决方法之一

将sql导入数据库出现Finished with error&#xff0c;文末是最终解决方法。 问题描述&#xff1a;sql导入出现Finished with error 解决方法探索过程&#xff1a; 1&#xff09;参考链接2和3&#xff0c;在mysql的bin目录下输入以下指令连接数据库 mysql -h localhost -u ro…

第25讲:顺序表专题

1.什么是数据结构 2.顺序表概念及结构 3.顺序表分类 4.实现动态顺序表 1.什么是数据结构 数据结构是计算机存储、组织数据的方式。可以用来完成通讯录项目。 2.顺序表概念及结构 2.1线性表 线性表是n个具有相同特性的数据元素的有限序列 常见的线性表&#xff1a;顺序表…

智能监控系统EasyCVR设备录像无法下载是什么原因?该如何解决?

视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

【React教程】(2) React之JSX入门与列表渲染、条件渲染详细代码示例

目录 JSX环境配置基本语法规则在 JSX 中嵌入 JavaScript 表达式在 JavaScript 表达式中嵌入 JSXJSX 中的节点属性声明子节点JSX 自动阻止注入攻击在 JSX 中使用注释JSX 原理列表循环DOM Elements 列表渲染语法高亮 条件渲染示例1&#xff1a;示例2&#xff1a;示例3&#xff08…

递归方法的理解,什么时候递,什么时候归

简单总结一下递归。递归就是在运行的过程中调用自己。递归需要有一个出口&#xff0c;如果无限递归是没有意义的&#xff0c;而且递归到一定程度&#xff0c;程序就会由于栈内存溢出导致程序报错。 我们先来看段代码&#xff1a;建议大家先思考这个代码在控制台输出的结果是什…

性能测试+Jmeter介绍

文章目录 什么是性能测试?性能测试的目的性能测试分类一般性能测试负载测试压力测试大数据量测试配置测试稳定性测试 性能测试术语虚拟用户并发及并发用户数响应时间每秒事务数吞吐量、吞吐率点击率性能计数器资源利用率 性能测试流程测试计划阶段测试设计阶段测试开发阶段测试…

SQL中实现行列转换

目录 方法一&#xff1a;sum case when 方法二&#xff1a;sum if 方法三&#xff1a;pivot 现在有一张表class_gender&#xff0c;内容如下&#xff1a; classgender一年级女一年级女一年级男一年级男二年级女二年级女二年级男 现在我们要根据上表&#xff0c;统计得到下…

Redis常用数据结构与应用场景

常用数据结构 StringHashListSetZset String常用操作 String应用场景 Hash常用操作 hash应用场景 Hash结构优缺点 优点 同类数据归类整合存储,方便数据管理相比String操作消耗内存与spu更小相比string更节省空间 缺点 过期功能不能使用在field上,只用用在key上Redis集群…

java学习之路(2)-编译java文件运行Java文件

创建.java后缀文本文件HelloWorld .java 写入代码&#xff1a; public class HelloWorld { public static void main(String []args) { System.out.println("Hello World"); } } 运行cmd命令 找到代码所在目录 输入javac编译Java文件生成HelloWorld.class 编译:…

CentOS 7 部署 ZeroTier Moon 节点

ZeroTier是一套使用UDP协议构建的SD-WAN网络软件&#xff0c;其主要有三部分组成&#xff1a;行星服务器Planet、月亮服务器Moon、客户端节点LEFA&#xff0c;行星服务器是ZeroTier的根节点&#xff0c;可以采用ZeroTier官方的服务器&#xff0c;也可以使用开源代码自行搭建 月…

Android中下载 HAXM 报错 Intel® HAXM installation failed,如何解决?

最近在搭建 Flutter 环境&#xff0c;但是在 Android Studio 中安装 Virtual Device 时&#xff0c;出现了一个 问题 Intel HAXM installation failed. To install Intel HAXM follow the instructions found at: https://github.com/intel/haxm/wiki/Installation-Instructio…

深度强化学习(王树森)笔记09

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…