对象存储文档中心入门中心API 中心SDK 中心文档活动我的反馈文档反馈官招募中,报名立赚积分兑换代金券!> HOT文档中心>对象存储限制上传文件大小和类型最近更新时间:2024-12-03 17:59:32
微信扫一扫QQ新浪微博复制链接链接复制成功我的收藏本页目录:准备工作案例一:通过 POST Object 接口在上传对象时指定对象大小范围案例二:通过临时密钥指定对象大小范围案例三:通过存储桶策略限制文件上传类型对象存储(Cloud Object Storage,COS)可以在上传对象时,对上传的文件类型、大小进行限制。限制上传的文件类型,可以保证您的存储桶中不会存放不符合预期的文件;限制上传的文件大小,可以方便您更加灵活管理存储空间,避免上传过大、过小文件浪费存储空间与网络带宽。下面列举了两个案例介绍如何精细化地控制上传文件的大小。准备工作在以下案例中,会使用到如下信息:主账号的 APPID:1250000000存储桶名称:examplebucket-1250000000在实际使用中,请替换为您自身的存储桶,并且使用拥有存储桶操作权限的账号和密钥操作存储桶。案例一:通过 POST Object 接口在上传对象时指定对象大小范围在使用 POST Object 上传对象,可以在表单里添加字段 “content-length-range” 以限制此次请求的对象大小,格式如下所示:[ "content-length-range", minNum, maxNum ]示例如下:[ "content-length-range", 1, 10]该字段以 JSON 形式添加在 POST 请求表单中的策略(policy)-条件(condition)里。一个带有该字段的完整策略(policy)如下: { "expiration": "2021-12-31T12:00:00Z", "conditions": [ { "bucket": "examplebucket-1250000000" }, [ "starts-with", "$key", "exampleobject" ], { "q-ak": "************************************" }, { "q-sign-algorithm": "sha1" }, { "q-sign-time": "1567150692;1567157892" }, [ "content-length-range", 1, 10 ] ]}如何构造完整的请求,请参见 POST Object API 文档。响应当上传的对象文件大小满足条件时,返回成功,例如:HTTP/1.1 204 Content-Length: 0Connection: closeDate: Wed, 23 Aug 2020 08:14:53 GMTETag: "ee8de918d05640145b18f70f4c3aa602"Location: http://examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobjectServer: tencent-cosx-cos-request-id: NWQ2NzgxMzZfMmViMDJhMDlfY2NjOF84NGQz****当上传的对象文件大小超出指定范围时,返回失败。若对象过大,则响应如下:HTTP/1.1 400 Bad RequestContent-Type: application/xmlContent-Length: 498Connection: keep-aliveDate: Wed, 23 Aug 2020 08:14:53 GMTServer: tencent-cosx-cos-request-id: NTk5ZDM5N2RfMjNiMjM1MGFfMmRiX2Y0**** EntityTooLarge
Condition key content-length-range doesn't match the value examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject NTk5ZDM5N2RfMjNiMjM1MGFfMmRiX2Y0****若对象过小,则响应如下:HTTP/1.1 400 Bad RequestContent-Type: application/xmlContent-Length: 498Connection: keep-aliveDate: Wed, 23 Aug 2020 08:14:53 GMTServer: tencent-cosx-cos-request-id: NTk5ZDM5N2RfMjNiMjM1MGFfMmRiX2Y0**** EntityTooSmall
Condition key content-length-range doesn't match the value examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject NTk5ZDM5N2RfMjNiMjM1MGFfMmRiX2Y0****案例二:通过临时密钥指定对象大小范围案例一的优点是使用简单,只需要在请求表单里添加一个参数即可实现。但缺点是只支持 POST Object 接口,不支持 PUT Object 接口;不利于统一管理,请求执行者可以在生成请求时修改限制参数,导致可上传限制范围之外的对象大小。存储桶的管理人员可以在申请临时密钥时,使用以下字段来限制对象大小,COS 对象大小使用字段 cos:content-length 来表示:条件字段含义示例numeric_greater_than数值大于{"numeric_greater_than": {"cos:content-length": 1}},对象必须大于1bytenumeric_greater_than_equal数值大于等于{"numeric_greater_than_equal": {"cos:content-length": 1}},对象必须大于或者等于1bytenumeric_less_than数值小于{"numeric_less_than": {"cos:content-length": 1}},对象必须小于1bytenumeric_less_than_equal数值小于等于{"numeric_less_than_equal": {"cos:content-length": 1}},对象必须小于或者等于1byte完整请求请参见 STS 的获取临时访问凭证 API 文档,一个完整的策略(policy)如下:{ "version": "2.0", "statement": [ { "effect": "allow", "action": [ "cos:PutObject", "cos:PostObject" ], "resource": [ "qcs::cos:ap-guangzhou:uid/1250000000:examplebucket-1250000000/*" ], "condition": { "numeric_greater_than_equal": {"cos:content-length": 1}, "numeric_less_than": {"cos:content-length": 10} } } ]}使用这个策略申请到的临时认证,可以使用 PUT Object 与 POST Object 接口将对象上传至存储桶 examplebucket-1250000000,但是对象大小的限制范围为[1, 10) byte。注意:此策略当前只适用于 cos:PutObject、cos:PostObject 这两个 action,其他 action(例如 cos:GetObject)会失败。通过这种机制,可以由存储桶的管理人员或者“认证中心”统一的向 STS 申请临时密钥,在申请时完成限定对象大小,再将临时密钥发放给操作人员或者业务模块。这样就能保证上传的对象符合我们预期,避免请求参数被篡改。响应如果上传的对象符合限定大小,上传请求成功,则返回200或者204。如果上传对象超出了限定范围,则返回403失败,示例如下:HTTP/1.1 403 ForbiddenContent-Type: application/xmlContent-Length: 298Connection: keep-aliveDate: Wed, 23 Aug 2020 08:14:53 GMTServer: tencent-cosx-cos-request-id: NTk5ZDM5N2RfMjNiMjM1MGFfMmRi********案例三:通过存储桶策略限制文件上传类型可以通过存储桶策略中指定文件上传类型,存储桶策略语法示例请参见 存储桶策略示例。通过存储桶策略限制文件上传类型操作步骤如下:1. 登录 对象存储控制台。2. 在左侧导航栏中,单击存储桶列表,选择需要添加存储桶策略的存储桶,进入存储桶。3. 单击权限管理 > Policy权限设置。4. 根据实际需求,选择图形设置或策略语法,添加存储桶策略。关于配置项说明,请参见 访问策略语言概述。5. 在条件配置项中选择 content-type 以指定文件类型(例如 image/png)。如下图所示:说明:Content-Type 表示 RFC 2616中定义的 HTTP 请求内容类型(MIME),例如 application/xml 或 image/jpeg。6. 单击确定,保存策略。策略如下:{ "Statement": [{ "Action": [ "name/cos:PutObject" ], "Effect": "Allow", "Principal": { "qcs": [ "qcs::cam::anyone:anyone" ] }, "Resource": [ "qcs::cos:ap-nanjing:uid/1250000000:examplebucket-1250000000/*" ], "Condition": { "ForAllValues:StringEquals": { "cos:content-type":["image/png"] }} ], "version": "2.0"}7. 验证策略是否生效。通过上述步骤,设置只允许 PNG 文件上传,上传一个 PNG 格式文件。验证上传一个PNG格式文件是否可以成功,如果响应200,则表示上传成功。验证上传一个JPEG格式文件是否可以成功,如果响应Access Denied则表示该策略成功拦截了非 PNG 格式的文件上传到 COS 中。下一篇: 产品动态Copyright © 2013-2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有深圳市腾讯计算机系统有限公司ICP备案/许可证号:粤B2-20090059粤公网安备44030502008569号腾讯云计算(北京)有限责任公司京ICP证150476号 | 京ICP备11018762号中国站中文International文档“捉虫”活动检视指定产品文档,发现和反馈有效问题,奖!API专项"捉虫"反馈API文档问题,代金券、周边好礼奖不停!文档建议,你提了吗快来使用腾讯云产品文档,提出有效建议,奖!在线咨询目录返回顶部