downloadtask my.downloadfile(object object)
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 网络 api 使用须知 、 本地文件
下载文件
客户端发起的是一个 https get 请求。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 兼容性 | 描述 |
---|---|---|---|---|---|
url | string | - | 是 | - | 下载地址。支持 https,不支持 http。除在线地址外,url 还支持图片类型的 base64 格式。客户端 10.5.10 ,ide 3.8.3 开始支持任意文件类型的 base64 格式 |
filepath | string | - | 否 | 支付宝: 10.2.80 ide: 3.5.1 |
|
header | object | - | 否 | - | http 请求 header。 |
timeout | number | 60000 | 否 | ios 支付宝: 10.3.20 android 支付宝: 10.2.80 ide: 3.4.3 |
超时时间,单位 ms |
success | function | - | 否 | - | 调用成功的回调函数 |
fail | function | - | 否 | - | 调用失败的回调函数 |
complete | function | - | 否 | - | 调用结束的回调函数(调用成功、失败都会执行) |
success 回调函数
参数
object res
属性 | 类型 | 兼容性 | 描述 |
---|---|---|---|
apfilepath | string | - | 下载文件保存的路径(本地临时文件),入参未指定 filepath 的情况下可用 |
tempfilepath | string | 基础库: 2.7.23 |
同 apfilepath |
filepath | string | 支付宝: 10.2.80 ide: 3.5.1 |
下载文件保存的路径(本地用户文件),入参指定 filepath 的情况下可用,其值与指定的 filepath 相同 |
statuscode | number | 基础库: 2.8.8 支付宝: 10.3.30 ide: 3.8.0 |
服务器返回的 http 状态码 |
header | object | 基础库: 2.8.8 支付宝: 10.3.30 ide: 3.8.0 |
服务器返回的 header |
datalength | number | 支付宝: 10.3.30 ide: 3.8.0 |
资源大小。和 response header 中的 content-length 相等 |
fail 回调函数
参数
object err
属性 | 类型 | 兼容性 | 描述 |
---|---|---|---|
error | number | - | 错误码 |
errormessage | string | - | 错误信息 |
data | string | 支付宝: 10.3.80 ide: 3.8.0 |
开发者服务器返回的数据。 |
statuscode | number | 支付宝: 10.3.80 ide: 3.8.0 |
开发者服务器返回的 http 状态码。 |
header | object | 支付宝: 10.3.80 ide: 3.8.0 |
开发者服务器返回的 http response header。 |
downloadtask
支付宝客户端 10.1.35 及以上版本,低版本需做 兼容处理。
可用于获取 http 响应头,监听上传进度变化,以及取消上传任务的对象。
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
2 | 参数非法 | 请检查是否有必填项没传,参数类型是否正确 |
缺少参数 xxx | 传入必填参数 |
|
参数 xxx 类型错误 | 检查参数类型 |
|
9 | downloadfile:fail abort |
调用了 downloadtask.abort() 中断了请求任务。 |
12 | 下载超时 | 若文件过大,可使用 timeout 设定超时时间。 |
请求失败。 | 请检查网络环境是否正常,服务器是否稳定,外网下是否能正常请求。 |
|
20 | 请求 url 不支持 http,请使用 https。 |
小程序已经不支持 http 请求,请使用 https。 |
my.downloadfile({
url: 'https://img.alicdn.com/tfs/tb1x669sxxxxxbdafxxxxxxxxxx-520-280.jpg',
success(res) {
console.log('downloadfile success:',res.apfilepath,res.tempfilepath); // apfilepath 与 tempfilepath 等价
},
fail(res) {
console.log('downloadfile fail:',res);
},
});
my.downloadfile({
url: 'https://alidata-pub.oss-cn-hangzhou.aliyuncs.com/test.pdf', // 请替换为有效的 url
filepath: `${my.env.user_data_path}/my.pdf`, // 指定存储路径
success(res) {
console.log('downloadfile success:',res.filepath); // 指定 filepath 才有此字段,与传入的 filepath 相等
},
fail(res) {
console.log('downloadfile fail:',res);
},
});
let fs = my.getfilesystemmanager();
my.downloadfile({
url: 'https://img.alicdn.com/tfs/tb1x669sxxxxxbdafxxxxxxxxxx-520-280.jpg',
success(res) {
const downpath = res.tempfilepath; // 下载后的路径,后缀名可能被篡改
// 先通过 detectfiletype 获取真正后缀名
my.detectfiletype({
filepath: downpath,
success(res) {
console.log('真正的后缀名:',res.extension);
// 保存文件,通过入参 filepath 修正路径
fs.savefile({
tempfilepath: downpath,
filepath: `${my.env.user_data_path}/img${res.extension}`,
success: (res1) => {
console.log('被修正过的路径',res1.savedfilepath)
}
})
}
});
}
});
my.downloadfile({
url: 'https://...', // 需要下载的资源
success(res) {
// 如果是图片 可以预览
// previewimage(res.tempfilepath);
// 如果是 pdf 可以查看
// opendocument(res.tempfilepath);
// 如果是图片 可以保存相册
// saveimagetophotosalbum(res.tempfilepath);
// 如果是视频 可以保存相册
// savevideotophotosalbum(res.tempfilepath);
}
});
// 预览图片
function previewimage(path) {
my.previewimage({
urls: [ res.apfilepath ]
});
}
// 打开 pdf 文件
function opendocument(path) {
my.opendocument({
filetype: 'pdf',
filepath: path
});
}
// 保存图片到相册
function saveimagetophotosalbum(path) {
my.saveimagetophotosalbum ({
filepath: path,
success (res) {
console.log ('saveimagetophotosalbum 调用成功', res);
}
});
}
// 保存视频到相册
function savevideotophotosalbum(path) {
my.savevideotophotosalbum ({
filepath: path,
success (res) {
console.log ('savevideotophotosalbum 调用成功', res);
}
});
}
-
tip只有当服务端状态码为 200,my.downloadfile 才会进入 success 回调。
-
tipmy.downloadfile 支持下载任何类型的文件。但图片类的后缀名可能会被篡改为 .image、视频类的后缀名可能被篡改为 .video,.docx/.excel等可能被改为 .other。可以通过 my.detectfiletype 获取文件真正的类型。可参考上文示例代码【代码示例->下载后将路径的后缀名转换为真实后缀名】
-
tipmy.downloadfile 下载后的文件路径可从出参 apfilepath 或 filepath 获取,两者均为内部虚拟路径,只能通过小程序的 api 访问。暂不支持保存文件到外部存储。具体可参考上文【代码示例->下载后如何应用】
-
tip10.3.70 以前此接口有缓存,且缓存无法去除。10.3.70 版本去掉了此接口的缓存功能。
-
bug支付宝 10.3.90 以下版本安卓端不支持 http 重定向,此时可能出现 ios 下载成功而 android 下载失败的情况
-
tip下载接口没有文件大小的限制。filesystemmanager.savefile 保存文件接口有单个文件不能超过 30m、文件夹不能超过 200m 的限制。
-
bugios 端 10.5.10 以前,下载时指定的 filepath 若存在中文,会导致
my.opendocument
无法预览。此缺陷 10.5.10 已修复。 -
bugios 端支付宝 10.5.16 以下版本,my.downloadfile 可能会生成内部扩展名不正确的本地临时文件(可以使用小程序的文件 api 正常读取和操作,但通过
my.savefiletodisk
保存到系统存储空间后无法打开)。此缺陷已经在 10.5.16 版本修复。对于低版本的客户端,调用downloadfile
时指定包含正确的扩展名的filepath
入参可以规避此问题。