human: 如何处理七牛云的智能多媒体服务多文件压缩（mkzip）

gpt: [智能多媒体服务](https://developer.qiniu.com/dora) > API 文档 > 文件处理 >多文件压缩（mkzip）

#  多文件压缩（mkzip）

最近更新时间: 2021-07-26 17:38:23

# **简介**

**多文件压缩** ，为用户提供了批量文件的压缩存储功能。用户通过指定一系列
URL，即可将若干七牛空间中的资源文件，在七牛服务端压缩后存储。若用户同时指定了[saveas](https://developer.qiniu.com/code/v6/api/dora-
api/saveas.html)，则将生成的压缩文件以用户指定的 key 存储到指定的 bucket 中，若未指定 saveas，则以压缩文件的 hash
值作为 key 并存储到当前 bucket 中。

**注意** ：

  * 不支持压缩打包空文件。

# **少量文件压缩（mode=2）**

## **接口规格**

    
    
    POST /pfop/ HTTP/1.1
    Host: api.qiniu.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Qbox <AccessToken>
        
    bucket=<bucket>&key=<key>&fops=<mkzipArgs>
    

参数名称 | 必填 | 说明  
---|---|---  
`<bucket>` | 必填 | 存储空间名。  
`<key>` | 必填 | 存储空间内指定资源的文件名字。此处的key所指的资源内容对 mkzip 操作本身没有影响，必填是由于 pfop 接口规格要求请求 body 中参数必须包含 bucket 和 key，因此即使未对空间特定资源进行操作，在执行 mkzip 操作时仍然需要指定账号下的特定空间和该空间的已有资源。  
`<mkzipArgs>` | 必填 | mkzipArgs 规格说明如下。  
  
mkzipArgs 规格说明：

    
    
    mkzip/<mode>
         /encoding/<UrlsafeBase64EncodedEncoding>
         /url/<Base64EncodedURL1>[/alias/<Base64EncodedAlias1>]
         /url/<Base64EncodedURL2>[/alias/<Base64EncodedAlias2>]
         ... ...
         /url/<Base64EncodedURLN>[/alias/<Base64EncodedAliasN>]
    

参数名称 | 必填 | 说明  
---|---|---  
`<Mode>` | 必填 | 值为 2，用于少量文件压缩，mkzipArgs字符串长度不能超过2048字节。  
`/encoding/<UrlsafeBase64EncodedEncoding>` | 可选 | 指示压缩包内资源命名的编码，目前支持 gbk 和 utf-8，默认 utf-8。  
`/url/<Base64EncodedURLN>` | 至少一项 | 需要被压缩资源（这些资源必须处于同一个 bucket 下）的 URL，必须是公网可访问资源，在请求中需要经过[URL安全的Base64编码](https://developer.qiniu.com/kodo/manual/appendix#urlsafe-base64)。  
`/alias/<Base64EncodedAliasN>` | 可选 | 资源在压缩文件中的别名，需要经过[URL安全的Base64编码 __](https://developer.qiniu.com/kodo/manual/appendix#urlsafe-base64)，若不指定则为 url 中资源的原文件名。  
  
## **示例**

以[持久化数据处理 __](https://developer.qiniu.com/code/v6/api/dora-
api/pfop/pfop.html)的形式：

  1. 获取以下资源：

  * `http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg`
  * `http://78re52.com1.z0.glb.clouddn.com/resource/dive-into-golang.pptx`
  * `http://78re52.com1.z0.glb.clouddn.com/resource/thinking-in-go.mp4`

  2. 将 `http://78re52.com1.z0.glb.clouddn.com/resource/gogopher.jpg` 重命名为 mkziptest；
  3. 将 mkziptest、dive-into-golang.pptx 和 thinking-in-go.mp4 打包，并另存为成 resource/mkziptest 保存到空间 qiniu-developer 中：

    
    
    POST /pfop/ HTTP/1.1
    Host: api.qiniu.com  
    Content-Type: application/x-www-form-urlencoded  
    Authorization: QBox <AccessToken>  
    
    bucket=qiniu-developer
    &key=1.png
    &fops=mkzip%2f2%2furl%2faHR0cDovLzc4cmU1Mi5jb20xLnowLmdsYi5jbG91ZGRuLmNvbS9yZXNvdXJjZS9nb2dvcGhlci5qcGc=%2falias%2fbWt6aXB0ZXN0%2furl%2faHR0cDovLzc4cmU1Mi5jb20xLnowLmdsYi5jbG91ZGRuLmNvbS9yZXNvdXJjZS9kaXZlLWludG8tZ29sYW5nLnBwdHg=%2furl%2faHR0cDovLzc4cmU1Mi5jb20xLnowLmdsYi5jbG91ZGRuLmNvbS9yZXNvdXJjZS90aGlua2luZy1pbi1nby5tcDQ=
    

其中，请求 body 中的 key = 1.png
仅仅为符合[pfop](https://developer.qiniu.com/dora/api/persistent-data-processing-
pfop)操作的接口规格而存在，并没有实际的意义，但需要是操作空间中存在的资源的 key。

# **大量文件压缩（mode=4）**

**为了将大量文件压缩，可以将待压缩文件URL写入一个索引文件，上传至bucket，再对该索引文件进行的mkzip操作。**

## 索引文件格式为：

    
    
    /url/<Base64EncodedURL1>[/alias/<Base64EncodedAlias1>]
    /url/<Base64EncodedURL2>[/alias/<Base64EncodedAlias2>]
    ... ...
    /url/<Base64EncodedURLN>[/alias/<Base64EncodedAliasN>]
    

参数说明 | 必填 | 说明  
---|---|---  
`/url/<Base64EncodedURLN>` | 至少一项 | 需要被压缩资源（这些资源必须处于同一个 bucket 下）的 URL，必须是公网可访问资源，在请求中需要经过[URL安全的Base64编码](https://developer.qiniu.com/kodo/manual/appendix#urlsafe-base64) 。  
`/alias/<Base64EncodedAliasN>` | 可选 | 资源在压缩文件中的别名，需要经过[URL安全的Base64编码 __](https://developer.qiniu.com/kodo/manual/appendix#urlsafe-base64)，若不指定则为 url 中资源的原文件名。  
  
**注意** ：

  * 每一行填写一个待压缩文件URL及重命名参数
  * **索引文件必须和目标资源文件在同一个bucket内**
  * 资源总数目不超过3000个，总文件大小不超过45000MB

## **接口规格**

    
    
    POST /pfop/ HTTP/1.1
    Host: api.qiniu.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Qbox <AccessToken>
        
    bucket=<bucket>&key=<key>&fops=<mkzipArgs>
    

参数名称 | 必填 | 说明  
---|---|---  
`<bucket>` | 必填 | 存储空间名  
`<key>` | 必填 | key即为上面的索引文件  
`<mkzipArgs>` | 必填 | mkzipArgs 规格说明如下  
  
其中 mkzipArgs 规格为：

    
    
    mkzip/<mode>
         /encoding/<UrlsafeBase64EncodedEncoding>
    

参数名称 | 必填 | 说明  
---|---|---  
`<Mode>` | 必填 | 取值为 4，用于大量文件压缩。  
`/encoding/<UrlsafeBase64EncodedEncoding>` | 可选 | 指示压缩包内资源命名的编码，目前支持 gbk 和 utf-8，默认 utf-8。  
  
## **示例**

以[持久化处理 __](https://developer.qiniu.com/code/v6/api/dora-
api/pfop/pfop.html)的形式：

  1. 将下列地址的三个文件压缩上传到空间中， 压缩后的文件名字为 `mode4.zip` ：

  * `http://ogtoywd4d.bkt.clouddn.com/resource/gogopher.jpg`
  * `http://ogtoywd4d.bkt.clouddn.com/resource/dive-into-golang.pptx`
  * `http://ogtoywd4d.bkt.clouddn.com/resource/thinking-in-go.mp4`

  2. 默认这三个文件在压缩文件中的名字分别为 gogopher.jpg、 dive-into-golang.pptx、thinking-in-go.mp4。
  3. 假如我们想将 `http://ogtoywd4d.bkt.clouddn.com/resource/gogopher.jpg` 保存在压缩文件中的名字替换为`mkziptest`。
  4. 那么最后的索引文件格式为[mkzip-index.txt __](http://ogtoywd4d.bkt.clouddn.com/index)，这个时候我们需要上传改索引文件到您要保存的bucket中， 假如保存在bucket中的文件名字为`mkzip-index.txt`，那么最后的请求命令如下：

    
    
    POST /pfop/ HTTP/1.1
    Host: api.qiniu.com  
    Content-Type: application/x-www-form-urlencoded  
    Authorization: QBox <AccessToken>  
    
    bucket=qiniu-developer&key=mkzip-index.txt&fops=mkzip/4/|saveas/cWluaXUtZGV2ZWxvcGVyOm1remlwNC56aXA=
    

其中 cWluaXUtZGV2ZWxvcGVyOm1remlwNC56aXA= 是由 qiniu-developer:mkzip4.zip 经过 URL
安全的 Base64 编码生成。

# **操作方式**

多文件压缩接口，目前只能以 [持久化处理 __](https://developer.qiniu.com/dora/1291/persistent-
data-processing-pfop)形式来使用。

以上内容是否对您有帮助？