# 获取文件下载链接
如果你开发微信小程序或公众号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"
}
]
}