jancd/qiniu-developer_ShareGPT huggingface dataset:
human: 如何处理七牛云的对象存储下载凭证

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[安全机制](https://developer.qiniu.com/kodo/development_guidelines/1644/security)
> 下载凭证

#  下载凭证

最近更新时间: 2021-07-14 19:47:26

下载凭证是用于对私有资源下载的授权，通过授权客户端，使其具备访问指定私有资源的能力。下载私有资源的请求需要带一个合法的下载凭证。不带凭证或带非法凭证的请求将返回
HTTP 错误码 401，代表认证失败。下载公开空间资源不需要下载凭证。

# 算法

1.构造下载 URL：

    
    
    DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg'
    

2.为下载 URL 加上过期时间 e
参数，[Unix时间戳](https://developer.qiniu.com/kodo/glossary/1647/u#unixtime)：

    
    
    DownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg?e=1451491200'
    

3.对上一步得到的 URL 字符串计算[HMAC-
SHA1](https://developer.qiniu.com/kodo/glossary/1643/h#hmac-
sha1)签名（假设访问密钥（AK/SK）是 **MY_SECRET_KEY** ），并对结果做[URL 安全的 Base64
编码](https://developer.qiniu.com/kodo/manual/1231/appendix#urlsafe-base64)：

    
    
    Sign = hmac_sha1(DownloadUrl, 'MY_SECRET_KEY')
    EncodedSign = urlsafe_base64_encode(Sign)
    

4.将访问密钥（AK/SK）（假设是 **MY_ACCESS_KEY** ）与上一步计算得到的结果用英文符号 : 连接起来：

    
    
    Token = 'MY_ACCESS_KEY:438dd8pXocjYuF-6dTcKMtETB2g='
    

5.将上述 **Token** 拼接到含过期时间参数 e 的 **DownloadUrl** 之后，作为最后的下载 URL：

    
    
    RealDownloadUrl = 'http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg?e=1451491200&token=MY_ACCESS_KEY:438dd8pXocjYuF-6dTcKMtETB2g='
    

**RealDownloadUrl** 即为下载对应私有资源的可用 URL
(带有参数的情况下,需要将query一起进行签名)，并在指定时间后失效。失效后，可按需要重新生成下载凭证。

**注意** ：

  * 为确保客户端、业务服务器和七牛服务器对于授权截止时间的理解保持一致，需要同步校准各自的时钟。频繁返回 401 状态码时请先检查时钟同步性与生成 e 参数值的代码逻辑。
  * token 必须放在请求的最后，token 之后的参数会被忽略。以请求 `http://test.cinem.net/aaaa.jpg?e=1778754963&token=sQvk4AXf0rEkzcytkr...XjI0M:zwvwiM0wsMBRj46xcby05U=&attname=geral_TS-PFS3010-8ET`为例,此时`attname=geral_TS-PFS3010-8ET`会被忽略，并不生效。
  * 对于包含中文或其它非英文字符的 Key，需要做到以下两点： 
    * Key 本身要做 UTF-8 编码
    * 为 URL 签名之前，对 Path 部分（不含前导 / 符号，通常就是 Key 本身，即上例中的 resource/flower.jpg）做一次[URL 安全的 Base64 编码](https://developer.qiniu.com/kodo/manual/1231/appendix#urlsafe-base64)。

# 示例

下载凭证不需要单独生成，七牛支持的服务端语言 SDK 都提供了生成完整下载私有资源 URL 的方法（包含下载凭证），各 SDK 的对应入口如下：

  * [Java __](https://github.com/qiniu/java-sdk/blob/master/src/main/java/com/qiniu/util/Auth.java)
  * [Python __](https://github.com/qiniu/python-sdk/blob/master/qiniu/auth.py)
  * [PHP __](https://github.com/qiniu/php-sdk/blob/master/src/Qiniu/Auth.php)
  * [Go __](https://github.com/qiniu/go-sdk/blob/master/storage/token.go)
  * [Node.js __](https://developer.qiniu.com/kodo/sdk/1289/nodejs#private-get)
  * [C/C++__](https://github.com/qiniu/c-sdk/blob/master/qiniu/rs.c)
  * [C#__](https://github.com/qiniu/csharp-sdk/blob/master/src/Qiniu/Util/Auth.cs)
  * [Ruby __](https://github.com/qiniu/ruby-sdk/blob/master/lib/qiniu/auth.rb)

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储管理凭证历史文档

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[安全机制](https://developer.qiniu.com/kodo/development_guidelines/1644/security)
> [管理凭证](https://developer.qiniu.com/kodo/development_guidelines/1201/access-
token) > 管理凭证历史文档

#  管理凭证历史文档

最近更新时间: 2021-07-02 17:11:12

资源管理属于敏感的操作，原则上所有资源管理操作均应在业务服务端进行。关于管理配置，七牛支持的服务端语言 SDK
都已经封装好，例如资源删除、移动和复制等操作只需调用相应的方法即可，不需要手动生成管理配置的发送请求。各 SDK 的对应入口如下：

  * [Java __](https://github.com/qiniu/java-sdk/blob/master/src/main/java/com/qiniu/util/Auth.java)
  * [Python __](https://github.com/qiniu/python-sdk/blob/master/qiniu/auth.py)
  * [PHP __](https://github.com/qiniu/php-sdk/blob/master/src/Qiniu/Auth.php)
  * [Go __](https://github.com/qiniu/go-sdk/blob/master/storage/token.go)
  * [Node.js __](https://developer.qiniu.com/kodo/sdk/1289/nodejs#private-get)
  * [C/C++__](https://github.com/qiniu/c-sdk/blob/master/qiniu/rs.c)
  * [C#__](https://github.com/qiniu/csharp-sdk/blob/master/src/Qiniu/Util/Auth.cs)
  * [Ruby __](https://github.com/qiniu/ruby-sdk/blob/master/lib/qiniu/auth.rb)

每一个资源管理请求均需在 HTTP 请求头部增加一个 Authorization 字段，其值为符合管理凭证的字符串，示例如下：

    
    
    GET /stat/<EncodedEntryURI> HTTP/1.1
    Host: rs.qiniu.com
    Authorization: QBox <管理凭证>
    

注意： `EncodedEntryURI` 的细节请参考
[数据格式](https://developer.qiniu.com/kodo/api/1276/data-format)

管理凭证是七牛云存储用于验证管理请求是否合法的机制，建议在业务服务器端使用。例如查看资源元信息、删除或移动资源等，通常需要带一个合法的管理凭证。不带凭证或带非法凭证的管理请求将返回
HTTP 错误码
401，代表认证失败。管理凭证的作用与[下载凭证](https://developer.qiniu.com/kodo/manual/1202/download-
token)类似：

  * 保证请求发起者拥有对目标空间的管理权限。
  * 保证服务端收到的管理请求内容未经中途篡改，具体包括代表管理动作的 URI 和该管理动作的参数信息均应未受到篡改。

# 算法

1.生成待签名的原始字符串：  
抽取请求 URL 中 <path> 或 <path>?<query> 的部分与请求内容部分即 HTTP Body，用 \n
连接起来。如无请求内容，该部分必须为空字符串。**注意：** 当 Content-Type 为 application/x-www-form-
urlencoded 时，签名内容必须包括请求内容。

    
    
    signingStr = "<path>?<query>\n"
    或
    signingStr = "<path>?<query>\n<body>"
    

2.使用[SecertKey __](https://portal.qiniu.com/user/key)对上一步生成的原始字符串计算[HMAC-
SHA1](https://developer.qiniu.com/kodo/glossary/1643/h)签名：

    
    
    sign = hmac_sha1(signingStr, "<SecretKey>")
    

3.对签名进行[URL 安全的 Base64
编码](https://developer.qiniu.com/kodo/manual/1231/appendix#urlsafe-base64)：

    
    
    encodedSign = urlsafe_base64_encode(sign)
    

4.将 AccessKey 和 encodedSign 用英文符号 : 连接起来：

    
    
    accessToken = "<AccessKey>:<encodedSign>"
    

# 示例

    
    
    # 假设有如下的管理请求：  
    AccessKey = "MY_ACCESS_KEY"
    SecretKey = "MY_SECRET_KEY"
    url = "http://rs.qiniu.com/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ="
    
    #则待签名的原始字符串是：
    signingStr = "/move/bmV3ZG9jczpmaW5kX21hbi50eHQ=/bmV3ZG9jczpmaW5kLm1hbi50eHQ=\n"
    
    #签名字符串是：  
    sign = "157b18874c0a1d83c4b0802074f0fd39f8e47843"
    注意：签名结果是二进制数据，此处输出的是每个字节的十六进制表示，以便核对检查。
    
    #编码后的签名字符串是：
    encodedSign = "FXsYh0wKHYPEsIAgdPD9OfjkeEM="
    
    #最终的管理凭证是：  
    accessToken = "MY_ACCESS_KEY:FXsYh0wKHYPEsIAgdPD9OfjkeEM="
    

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储上传资源

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) > 上传资源

#  上传资源

最近更新时间: 2021-02-24 17:41:27

  
注意：

  * 上传文件的名称中，不支持\0字符。
  * 若文件名中存在\0字符，则会返回 400 Bad Request 和 error message “key must not contain null byte”。
  * 上传文件名 utf-8 编码字符，长度不超过 750 字节 。
  * 若有特殊需求，请联系技术支持。  
  

## **表单上传**

表单上传是指在一个单一的 HTTP POST 请求中完成一个文件的上传，比较适合简单的应用场景和尺寸较小的文件。

表单上传的使用细节请参考[表单上传](https://developer.qiniu.com/kodo/manual/1272/form-upload)。

## **分片上传**

分片上传是将一个文件分为多个小数据块，每个小数据块以一个独立的 HTTP
请求分别上传。所有小数据块都上传完成后，再发送一个请求给服务端将这些小数据块组织成一个逻辑资源，以完成上传过程。

相比表单上传，分片上传的优势：

  * 适合尺寸较大的文件传输，通过分片来避免单个 HTTP 数据量过大而导致连接超时的现象。
  * 在网络条件较差的环境下，较小尺寸的文件可以有较高的上传成功率，从而避免无休止的失败重试。
  * 支持断点续传。

然而，相比表单上传，分片上传需要多次 HTTP
请求才能完成上传过程，会有额外的成本开销。另外也增加了代码的复杂度，因此选择是否使用分片上传时应谨慎评估使用的必要性。

分片上传的使用细节请参考[分片上传 v1 版](https://developer.qiniu.com/kodo/manual/1650/chunked-
upload)、[分片上传 v2 版](https://developer.qiniu.com/kodo/manual/7458/shard-
upload-v2-version)，两种分片上传不同见详情。

## **上传后续动作**

在上传时开发者可以指定上传完成后服务端的后续动作，例如回调通知(callback)、自定义响应内容、303重定向等。可设置的后续动作与[表单上传](https://developer.qiniu.com/kodo/manual/1272/form-
upload)中完全一致。

这里需要明确的是，虽然后续动作在生成[上传凭证](https://developer.qiniu.com/kodo/manual/1208/upload-
token)时已经指定，但这些后续动作只在服务端处理完创建文件(mkfile)请求后才会发生，而且也只有mkfile请求的内容可以包含[变量](https://developer.qiniu.com/kodo/manual/1235/vars)。

## **在线示例**

[在线断点继上传示例 __](http://jssdk-v2.demo.qiniu.io)

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储分片上传 v1 版

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 分片上传 v1 版

#  分片上传 v1 版

最近更新时间: 2020-12-28 20:04:49

分片上传支持将一个文件切割为一系列特定大小的数据片，分别将这些小数据片上传到服务端，全部上传完后再在服务端将这些数据片合并成为一个资源。

分片上传引入了两个概念：**块** （Block）和**片** （Chunk）。每个**块** 由一到多个**片** 组成，而一个资源则由一到多个**块**
组成。他们之间的关系可以用下图表述：

![资源、块、片的关系](https://dn-odum9helk.qbox.me/FvdTJGHBPkJfTc-T5o2kNXcQUCGo)

**块** 和**片** 是上传过程中作为临时存储的单位。服务端会以约**七天** 为单位的周期清除上传后未被合并为块(文件)的数据片(块)。

与分片上传相关的 API
有：[创建块(mkblk)](https://developer.qiniu.com/kodo/api/1286/mkblk)、[上传片(bput)](https://developer.qiniu.com/kodo/api/1251/bput)、[创建文件(mkfile)](https://developer.qiniu.com/kodo/api/1287/mkfile)。一个完整的分片上传流程可用下图表示：

![分片上传流程](https://dn-odum9helk.qbox.me/FgC5dUBuKuuU6_ES5U-NtphznCYf)

其中的关键点如下：

  * 将待上传的文件按预定义块大小切分为若干个块（每块大小不大于 4MB）。如果这个文件小于 4MB，就只有一个块，如果文件大于 4MB， 除最后一块外，其余块大小固定为 4MB。
  * 将每个块再按预定义的片大小切分为若干个片，先在服务端创建一个相应块（通过调用[mkblk](https://developer.qiniu.com/kodo/api/1286/mkblk)，并带上第一个片的内容），然后再循环将所有剩下的片全部上传（通过调用[bput](https://developer.qiniu.com/kodo/api/1251/bput)，从而完成一个块的上传）
  * 在所有块上传完成后，通过调用[mkfile](https://developer.qiniu.com/kodo/api/1287/mkfile)将这些上传完成的块信息再严格的按顺序组装出一个逻辑资源的元信息，从而完成整个资源的分片上传过程。

如要更准确的理解这个基本流程，可以通过阅读 SDK 源代码。所有 SDK 的源代码都公开托管在[Github
__](http://github.com/qiniu)上。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储分片上传 v2 版

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 分片上传 v2 版

#  分片上传 v2 版

最近更新时间: 2020-12-28 20:04:59

分片上传（ Multipart Upload ），可以将要上传的文件分成多个数据块（ 又称之为 Part ）来分别上传，上传完成之后再调用接口将这些
Part 组合成一个 Object。

与分片上传相关的 API 有：[初始化 ( initiateMultipartUpload
)](https://developer.qiniu.com/kodo/api/6365/initialize-
multipartupload)、[分块上传数据 ( uploadPart )
](https://developer.qiniu.com/kodo/api/6366/upload-part)、[完成文件上传 (
completeMultipartUpload )
](https://developer.qiniu.com/kodo/api/6368/complete-multipart-upload)、[终止上传 （
abortMultipartUpload ）](https://developer.qiniu.com/kodo/api/6367/abort-
multipart-upload)、[列举已上传分片 ( listParts
)](https://developer.qiniu.com/kodo/api/6858/listparts)。一个完整的分片上传流程可用下图表示：

![分片上传流程](https://dn-odum9helk.qbox.me/FkgOf1P2fRCJrYMCwTBxDNBGLpwh)

其中的关键点如下：

  * Part 大小要求，除最后一个 Part 外，每个 Part 大小在 1MB - 1GB 之间。
  * 每个 Multipart Upload 任务，最多 10000 个 Part， 编号 PartNumber 在 1 - 10000 （含）之间。
  * 要上传的文件切分成 Part 之后，实现并发上传。具体的并发个数并不是越多速度越快，要结合自身情况考虑。网络情况较好时，建议增大 Part 大小。反之，减小 Part 大小。
  * 在所有 Part 上传完成后，通过调用 completeMultipartUpload 将这些上传完成的 Part 信息严格的按编号 PartNumber 顺序（编号可以不连续，但必须是升序）组装出一个逻辑资源的元信息，从而完成整个资源的分片上传过程。

如要更准确的理解这个基本流程，可以通过阅读 SDK 源代码。所有 SDK 的源代码都公开托管在[Github
__](http://github.com/qiniu)上。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储简单反馈

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 简单反馈

#  简单反馈

最近更新时间: 2021-05-13 18:43:09

简单反馈是最直接的 HTTP 响应方式。客户端发起一次上传请求，然后等待服务端返回结果。服务端在处理完这次上传请求后，将处理结果以 HTTP
响应的方式反馈给客户端。

如果资源上传成功，服务端会响应 HTTP 200 返回码，且在响应内容中包含两个字段：

  * hash：已上传资源的校验码，供用户核对使用。
  * key：目标资源的最终名字，可由七牛云存储自动命名。

以下是一个典型的上传成功响应：

    
    
    HTTP/1.1 200 OK
    
    Content-Type: application/json
    Cache-Control: no-store
    
    {
       
        "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
        "key": "gogopher.jpg",
    }
    

如果资源上传失败，服务端会反馈相应的错误信息。例如 HTTP 401 代表验证失败，此时响应内容中会包含详细的错误信息，为 JSON
格式：{“error”:"<reason>"}。

以下是一个典型的上传失败响应：

    
    
    HTTP/1.1 400 Bad Request
    Date: Mon, 05 Aug 2013 13:56:34 GMT
    Server: nginx/1.0.14
    Content-Type: application/json
    Access-Control-Allow-Origin: *
    Content-Length: 28
    X-Log: MC;SBD:10;RBD:11;BDT:12;FOPD/400;FOPG:63/400;IO:109/400
    X-Reqid: -RIAAIAI8UjcgRcT
    X-Via: 1.1 jssq179:8080 (Cdn Cache Server V2.0), 1.1 jsyc96:9080 (Cdn Cache Server V2.0)
    Connection: close
    {
        
        "error":"invalid argument"
    }
    

这些返回的错误信息可以帮助开发者分析问题原因。完整的返回码信息请参考[错误码列表](https://developer.qiniu.com/kodo/api/3928/error-
responses#2)。

从上面的错误示例中可以看到，响应头中还包含了一些以`X-`为前缀的扩展字段，如：X-Reqid 和 X-Log
等。这些扩展信息非常有助于定位问题。我们建议开发者将所有接收到的错误信息写到日志中，以便于我们的技术支持人员在协助分析问题时有足够详细的线索。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储303 重定向

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 303 重定向

#  303 重定向

最近更新时间: 2021-05-13 18:50:23

303 重定向通常是在通过浏览器上传的场景中使用。浏览器中的网页可以在发起上传请求的同时通知服务器，一旦上传成功，服务器应该返回 HTTP 303
状态码并带上一个重定向 URL。浏览器在收到服务器返回的这个重定向 URL 后，将当前页面跳转到对应页面。

HTTP 303 重定向（参考[RFC 2616 - 10.3.4
__](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.4)）是 HTTP
1.1 规范的组成部分。服务器可以通过返回 303 状态码告诉客户端，本次请求的内容可以通过返回的跳转 URL 得到，因此客户端应该重定向到新的
URL。该技术被广泛用于网页开发领域，如在文件上传完成后让客户端自动重定向到一个上传成功的结果页面。 七牛云存储的资源上传后续动作也支持 303
重定向功能。

在构造[上传凭证](https://developer.qiniu.com/kodo/manual/1208/upload-
token)时，开发者可以通过设置[上传策略
(PutPolicy)](https://developer.qiniu.com/kodo/manual/1206/put-policy)中的
returnUrl 参数以激活 303 重定向功能。在成功完成上传后，服务端会向客户端返回 HTTP 303 状态码，并在 Location
字段中携带上传时指定的重定向地址。如下所示：

    
    
    HTTP/1.1 303 See Other
    Location: <returnUrl>
    

客户端收到这样的反馈后，应按 HTTP 1.1 标准将当前页面重定向到 Location 字段所指定的 URL。主流浏览器都支持该跳转操作。

如果上传策略中还设定了自定义返回内容 returnBody，则服务端返回的 303 响应中的 Location
字段也会包含自定义返回内容。参数值采用[URL 安全的 Base64
编码](https://developer.qiniu.com/kodo/api/1276/data-format#urlsafe-
base64)。此时的响应内容如下所示：

    
    
    HTTP/1.1 303 See Other
    Location: <returnUrl>?upload_ret=<encoded_return_body>
    

如果希望返回的自定义返回内容能得到正确处理，重定向 URL 所对应的服务器需支持请求参数 upload_ret。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储异步数据预处理

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 异步数据预处理

#  异步数据预处理

最近更新时间: 2021-02-24 17:43:09

在生成[上传凭证](https://developer.qiniu.com/kodo/manual/1208/upload-
token)时，开发者可以通过在[上传策略
(PutPolicy)](https://developer.qiniu.com/kodo/manual/1206/put-policy)中指定
persistentOps 和 persistentNotifyUrl
字段来设置异步数据处理动作。当资源上传完成后，设置的异步数据处理动作就会被以异步方式启动。七牛云存储立刻将响应内容返回给客户端，并不会等待数据处理动作完成。

关于数据处理结果持久化相关的详细内容，请参考[持久化数据处理](https://developer.qiniu.com/dora/manual/1291/persistent-
data-processing-pfop)中的相关描述。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储自定义响应内容

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[上传资源](https://developer.qiniu.com/kodo/development_guidelines/1234/upload-
types) > 自定义响应内容

#  自定义响应内容

最近更新时间: 2021-05-14 18:38:12

[简单反馈](https://developer.qiniu.com/kodo/manual/1651/simple-
response)只包含资源的基本信息，但很多情况下用户希望得到更多的资源信息。

在生成[上传凭证](https://developer.qiniu.com/kodo/manual/1208/upload-
token)时，开发者可以通过设置[上传策略
(PutPolicy)](https://developer.qiniu.com/kodo/manual/1206/put-
policy)中的`ReturnBody`字段指定需要返回的信息，例如资源的大小、类型，图片的尺寸等等。

`ReturnBody`实际上是用户定义的反馈信息模板，**内容必须用JSON格式表达** 。下面是一个示例：

    
    
    {
        "foo": "bar",
        "name": $(fname),
        "size": $(fsize),
        "type": $(mimeType),
        "hash": $(etag),
        "w": $(imageInfo.width),
        "h": $(imageInfo.height),
        "color": $(exif.ColorSpace.val)
    }
    

用户可以在`ReturnBody`中使用[魔法变量](https://developer.qiniu.com/kodo/manual/1235/vars#magicvar)和[自定义变量](https://developer.qiniu.com/kodo/manual/1235/vars#xvar)。七牛云存储会将这些变量替换为对应实际值，然后作为响应内容反馈给用户，如下所示：

    
    
      {
        "foo": "bar",
        "name": "gogopher.jpg",
        "size": 214513,
        "type": "image/jpg",
        "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
        "w": 640,
        "h": 480,
        "color": "sRGB"
      }
    

**注意：**如果[上传策略 (PutPolicy)](https://developer.qiniu.com/kodo/manual/1206/put-
policy)中通过设置`callbackUrl`字段启用了回调，`ReturnBody`将直接被忽略。

在回调模式中如果也想自定义响应内容，请在生成[上传凭证](https://developer.qiniu.com/kodo/manual/1208/upload-
token)时设置上传策略中的`callbackBody`字段。更多关于回调模式的解释，请参考[回调通知
(callback)](https://developer.qiniu.com/kodo/manual/1653/callback)。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储下载资源

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) > 下载资源

#  下载资源

最近更新时间: 2020-12-28 20:06:09

资源的下载采用`HTTP GET`方式（详见[RFC2616 标准
__](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35)）。下载过程所需的参数作为URL参数：

    
    
    http://<domain>/<key>?<param1>=<value1>&<param2>=<value2>...
    

下载过程通过标准的`HTTP`头部`Range`字段支持分片下载。用户可以在下载时设定该字段，指定只下载该资源的一部分内容：

    
    
    Range: bytes=<first-byte-pos>-<last-byte-pos>
    

支持`Range`字段相当于提供了断点续传功能，对于大资源的下载可以提供比较好的用户体验，例如暂停下载、网络中断并恢复后继续下载。

我们经常可以看到移动应用中有一个设置：只在WIFI连接时下载。这个功能就可以通过资源下载对`Range`字段的支持而比较容易的实现。客户端通过在网络连接切换时判断当前连接类型来自动判断是否应该暂停下载，这样可以避免因为大资源的下载而耗尽3G流量（例如安装包的下载）。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储公开资源下载

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[下载资源](https://developer.qiniu.com/kodo/development_guidelines/1232/download-
process) > 公开资源下载

#  公开资源下载

最近更新时间: 2020-12-28 20:06:31

公开资源下载通过 HTTP GET 的方式访问资源 URL 即可。资源 URL 的构成如下：

    
    
    http://<domain>/<key>
    

其中`<domain>`有两种形态：七牛子域名和自定义域名。

七牛子域名是创建空间时默认分配的域名，开发者请前往[七牛开发者平台
__](https://portal.qiniu.com/bucket)，选择一个空间后查看**测试域名** 即七牛子域名。子域名形式类似于
_78re52.com1.z0.glb.clouddn.com_ ，用户可以通过以下 URL 下载名为 _resource/flower.jpg_ 的资源：

    
    
    http://78re52.com1.z0.glb.clouddn.com/resource/flower.jpg
    

您也可以为某特定空间，申请绑定自定义域名，通过这个自定义域名访问资源，例如绑定的自定义域名为 _i.example.com_ ，您就可以通过以下 URL
访问同样的资源：

    
    
    http://i.example.com/resource/flower.jpg
    

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储私有资源下载

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[下载资源](https://developer.qiniu.com/kodo/development_guidelines/1232/download-
process) > 私有资源下载

#  私有资源下载

最近更新时间: 2020-12-28 20:06:42

当您将空间设置成私有时，必须获得授权，才能对空间内的资源进行访问。

私有资源下载是通过HTTP GET的方式访问特定的
URL。私有资源URL与公开资源URL相比只是增加了两个参数`e`和`token`，分别表示过期时间和[下载凭证](https://developer.qiniu.com/kodo/manual/1202/download-
token)。一个完整的私有资源 URL 如下所示：

    
    
    http://<domain>/<key>?e=<deadline>&token=<downloadToken>
    

参数`e`表示 URL
的过期时间，采用[Unix时间戳](https://developer.qiniu.com/kodo/glossary/1647/u#unixtime)，单位为秒。超时的访问将返回
401 错误。参数`token`表示下载凭证。下载凭证是对资源访问的授权，不带下载凭证或下载凭证不合法都会导致 401 错误，表示验证失败。

**注意：**

  * 如果请求方的时钟未校准，可能会造成有效期验证不正常，例如直接认为已过期。因此需要进行时钟校准。
  * 由于开发者无法保证客户端的时间都校准，所以应该在业务服务器上创建时间戳，并周期性校准业务服务器时钟。 
    * token 必须放在请求的最后，token 之后的参数会被忽略。以请求 `http://test.cinem.net/aaaa.jpg?e=1778754963&token=sQvk4AXf0rEkzcytkr...XjI0M:zwvwiM0wsMBRj46xcby05U=&attname=geral_TS-PFS3010-8ET`为例,此时`attname=geral_TS-PFS3010-8ET`会被忽略，并不生效

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储防盗链

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[下载资源](https://developer.qiniu.com/kodo/development_guidelines/1232/download-
process) > 防盗链

#  防盗链

最近更新时间: 2020-12-28 20:06:56

下载还有一种常见的场景，即公开资源的防盗链，例如禁止特定来源域名的访问，禁止非浏览器发起的访问等。

我们可以通过 HTTP 协议支持的 Referer 机制，来进行相应的来源识别和管理。

防盗链是一个系统设置，不影响开发工作。如发现有盗链情况，请前往[七牛开发者平台
__](https://portal.qiniu.com)，选择`融合CDN`，点击 **我的域名** 进行相应的设置。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储下载设置

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[下载资源](https://developer.qiniu.com/kodo/development_guidelines/1232/download-
process) > 下载设置

#  下载设置

最近更新时间: 2023-10-17 17:08:49

## 自定义下载速度

客户端访问文件（Object）时会占用较大带宽，在某些不容易控制流控的客户端上可能会对其他应用造成影响。为避免此类问题，可以利用单链接限速功能在上传（参考[上传策略](https://developer.qiniu.com/kodo/manual/1206/put-
policy)）`trafficLimit`
参数、下载文件等操作中进行流量控制，以保证其他应用的网络带宽。下载时以给该资源URL添加参数`?X-Qiniu-Traffic-Limit=<value>`
，限制此次下载请求响应速度：

    
    
    http://<domain>/<key>?X-Qiniu-Traffic-Limit=899200
    

  * X-Qiniu-Traffic-Limit，限速值取值范围为 819200 ~ 838860800，单位为 bit/s

## 自定义404响应

开发者可以要求七牛云存储在目标资源不存在时返回一个特定的内容，例如在网站上为这些找不到的资源显示一张特定的提示图片。通过自定义404响应可以达到这个效果。开发者只需向指定的空间上传一个资源名为`errno-404`的文件即可。

## 自定义资源下载名

默认情况下，如果在浏览器中访问一个资源URL，浏览器都会试图直接在浏览器中打开这个资源，例如一张图片。如果希望浏览器的动作是下载而不是打开，可以给该资源URL添加参数`?attname=<file_name>`：

    
    
    http://<domain>/<key>?attname=<file_name>
    

**注意** ：  
对于中文文件名，为了更好的支持中文，将`attname=`后面的中文文件名部分`URLEncoder`。

以Java举例：

    
    
    String URL = String.format("http://obzksbzy4.bkt.clouddn.com/4.jpg?attname=%s",URLEncoder.encode("(你好).jpg", "utf-8"))

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储高级下载

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) >
[下载资源](https://developer.qiniu.com/kodo/development_guidelines/1232/download-
process) > 高级下载

#  高级下载

最近更新时间: 2020-12-28 20:07:22

**特殊名字资源** 指资源名中包含了URL保留字符，如`?`、首字符`/`、以及多个连续的`/`等。如果直接访问将导致服务器错误理解URL格式。

要正常访问此类资源，请参考[特殊key资源的访问](https://developer.qiniu.com/kodo/kb/1321/how-to-
acquire-the-outside-storage-file-links)。开发者在命名资源时请谨慎使用URL保留字符。

以上内容是否对您有帮助？
human: 如何处理七牛云的对象存储管理存储空间

gpt: [对象存储](https://developer.qiniu.com/kodo) > 使用指南 >
[开发指南](https://developer.qiniu.com/kodo/development_guidelines/8596/development-
guidelines) > 管理存储空间

#  管理存储空间

最近更新时间: 2022-11-08 12:05:24

对象存储Kodo支持您对存储空间进行多样化的设置与管理：

快速链接 | 摘要  
---|---  
[绑定源站域名](https://developer.qiniu.com/kodo/development_guidelines/8622/dev-the-binding-source-domain-name) | 给空间绑定域名以提供正式的生产环境  
[访问控制](https://developer.qiniu.com/kodo/development_guidelines/8603/dev-access-control) | 针对不同访问权限，可限制对空间内对象的操作  
[静态页面管理](https://developer.qiniu.com/kodo/development_guidelines/8604/a-static-page-management) | 使用静态页面管理来将静态网站托管到存储空间  
[空间备注](https://developer.qiniu.com/kodo/development_guidelines/12137/space-note) | 通过空间备注给空间添加描述、说明  
[文件客户端缓存](https://developer.qiniu.com/kodo/development_guidelines/8605/dev-file-the-client-cache) | 配置服务端传输文件时的缓存时间  
[重定向](https://developer.qiniu.com/kodo/development_guidelines/12261/redirection) | 实现请求者访问空间并触发指定的条件时，按⾃定义的规则进⾏跳转  
[空间标签](https://developer.qiniu.com/kodo/development_guidelines/8607/dev-space-label) | 通过空间标签给空间标注、分类  
[空间授权](https://developer.qiniu.com/kodo/development_guidelines/8606/dev-authorization-of-the-space) | 支持将存储空间授予给其他七牛云用户，以便于其对空间内对象进行操作  
[跨域资源共享](https://developer.qiniu.com/kodo/development_guidelines/8608/dev-cross-domain-resource-sharing) | 支持自定义跨域资源共享规则，以便于跨域访问需求的实现  
[生命周期管理](https://developer.qiniu.com/kodo/development_guidelines/8609/dev-life-cycle-management) | 支持自定义规则更改空间内对象的存储类型及相应存储时间  
[事件通知](https://developer.qiniu.com/kodo/development_guidelines/8610/dev-event-notification) | 支持自定义规则以通知空间内事件  
[镜像回源](https://developer.qiniu.com/kodo/development_guidelines/8611/dev-the-mirror-back-to-the-source) | 快速的数据迁移和加速服务，帮助用户实现无缝数据迁移  
[跨区域同步](https://developer.qiniu.com/kodo/development_guidelines/8613/dev-cross-regional-synchronization) | 跨不同区域的存储空间之间同步数据  
[空间访问日志](https://developer.qiniu.com/kodo/development_guidelines/8614/space-access-log) | 支持自动保存访问空间的日志  
[删除存储空间](https://developer.qiniu.com/kodo/development_guidelines/8601/dev-delete-the-space) | 删除不需要的空间  
  
以上内容是否对您有帮助？