# 获取文件下载链接

如果你开发微信小程序或公众号H5,请移步适合的文档

建议通过开放接口服务 方式下载文件。在微信云托管控制台-「微信令牌权限配置」中添加/tcb/batchdownloadfile.

获取文件下载链接,一次最多 50 个

本接口应在服务器端调用,详细说明参见服务端API

# 请求地址

POST https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN

Secret置换token需要在Get参数 access_token 传token令牌使用

如果使用微信云调用令牌获取的token,Get参数名 access_token 应替换为 cloudbase_access_token

如果使用开放接口服务则不需要传Get参数 access_token

# 请求参数

属性 类型 默认值 必填 说明
access_token/cloudbase_access_token string 接口调用凭证
env string 云环境ID
file_list Array.<Object> 文件列表

# file_list 的结构

属性 类型 默认值 必填 说明
fileid string 文件ID
max_age number 下载链接有效期

# 返回值

返回的 JSON 数据包

属性 类型 说明
errcode number 错误码
errmsg string 错误信息
file_list Array.<Object> 文件列表

# File_list 的结构

属性 类型 说明
fileid string 文件ID
download_url string 下载链接
status number 状态码
errmsg string 该文件错误信息

# errcode 的合法值

说明 最低版本
0 请求成功
-1 系统错误
-1000 系统错误
40014 AccessToken 不合法
40097 请求参数错误
40101 缺少必填参数
41001 缺少AccessToken
42001 AccessToken过期
43002 HTTP METHOD 错误
44002 POST BODY 为空
47001 POST BODY 格式错误
85088 该小程序/公众号未开通微信云托管
其他错误码 错误码

# 请求数据示例

{
  "env": "test2-4a89da",
  "file_list": [
    {
      "fileid":"cloud://test2-4a89da.7465-test2-4a89da/A.png",
      "max_age":7200
    }
  ]
}

# 返回数据示例

{
  "errcode": 0,
  "errmsg": "ok",
  "file_list": [
    {
      "fileid": "cloud://test2-4a89da.7465-test2-4a89da/A.png",
      "download_url": "https://7465-test2-4a89da-1258717764.tcb.qcloud.la/A.png",
      "status": 0,
      "errmsg": "ok"
    }
  ]
}

# 常见问题

控制台能看到文件已上传成功,但下载文件报错“STORAGE_FILE_NONEXIST”

检查上传时是否漏传了x-cos-meta-fileid。如果确认漏传了,则此文件已无法下载,请以正确方式重新上传。

# 案例讲解

此处用PHP实现一下,需要开启开放接口服务

参照快速入门的方法,部署一个服务,代码如下:

php文件,注意替换微信云托管环境ID

<?php
  if(empty($_GET["cloudid"])) {
    echo sprintf('没有要下载的文件');
  } else {
    $CLOUDID = $_GET["cloudid"];
    if(empty(getenv("CBR_ENV_ID"))) $ENVID = 'werun-id'; // 可以忽略,在本地调试时可以添加
    else $ENVID = getenv("CBR_ENV_ID");

    $param = array(
      'env' => $ENVID, 
      'file_list' => array(array(
        'fileid' => $CLOUDID,
        'max_age' => 86400
      ))
    );
    
    $curl = curl_init();
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'http://api.weixin.qq.com/tcb/batchdownloadfile',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => '',
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 0,
      CURLOPT_FOLLOWLOCATION => true,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => 'POST',
      CURLOPT_POSTFIELDS => json_encode($param),
      CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json'
      ),
    ));
    $response = curl_exec($curl);
    curl_close($curl);
    echo $response;
  }
?>

dockerFile文件如下:

FROM php:7.3-apache

COPY index.php /var/www/html/

RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

CMD ["apachectl", "-DFOREGROUND"]

将两个文件组成文件夹,以文件夹形式上传版本,并部署发布

接下来访问公网域名,就可以获取指定文件的下载链接了,访问地址参考如下,get参数 cloudid 传文件ID

# 访问自己的公网域名,此处只是示例,cloudID填真实存在的
https://werun-id.ap-shanghai.run.tcloudbase.com/?cloudid=cloud://test.zip

获取的信息结构如下:

{
  "errcode": 0,
  "errmsg": "ok",
  "file_list": [
    {
      "fileid": "cloud://wxrun-id.8888-werun-id-1300000000/test.zip",
      "download_url": "https://8888-werun-id-1300000000.tcb.qcloud.la/test.zip?sign=08d",
      "status": 0,
      "errmsg": "ok"
    }
  ]
}