# 获取文件临时链接

用云文件 ID 换取真实链接,公有读的文件获取的链接不会过期,私有的文件获取的链接默认24小时有效期,可以自己设定。

一次最多取 50 个。

本文档适用于微信小程序中使用,如果你不是微信小程序,请移步适合的文档

# 请求参数

字段 说明 数据类型 默认值 必填
fileList 云文件 ID 列表 Object -
config 配置 Object -
success 成功回调
fail 失败回调
complete 结束回调

# 请求参数 fileList 的结构

字段 说明 数据类型
fileID 云文件ID String
maxAge 有效期时长,单位秒 number

# config 对象定义

字段 说明 数据类型
env 使用的环境 ID,填写后忽略 init 指定的环境 String

# success 返回参数

字段 说明 数据类型
fileList 文件列表 Object
errMsg 成功为 ok,失败为失败原因 String

# 返回参数 fileList 的结构

属性 类型 说明
fileID string 云文件 ID
tempFileURL string 临时文件路径
maxAge number 有效期时长,单位秒
status number 状态码,0 为成功
errMsg string 成功为 ok,失败为失败原因

# fail 返回参数

字段 说明 数据类型
errCode 错误码 Number
errMsg 错误信息,格式 downloadFile:fail msg String

# 使用示例

# 1. Promise 风格

wx.cloud.getTempFileURL({
  fileList: [{
    fileID: 'cloud://test.png', // 对象存储文件 ID 列表,最多50个,从上传文件接口或者控制台获取
    maxAge: 86400 , // 有效期时长,单位秒,默认86400
  }]
}).then(res => {
  console.log(res.fileList)
}).catch(error => {
  console.error(err)
})

// 或如下传参
wx.cloud.getTempFileURL({
  fileList: ['cloud://test.png'] // 对象存储文件 ID 列表,最多50个,从上传文件接口或者控制台获取
}).then(res => {
  console.log(res.fileList)
}).catch(error => {
  console.error(err)
})

# 2. Callback 风格

wx.cloud.getTempFileURL({
  fileList: [{
    fileID: 'cloud://test.png', // 对象存储文件 ID 列表,最多50个,从上传文件接口或者控制台获取
    maxAge: 86400 , // 有效期时长,单位秒,默认86400
  }],
  success: res => {
    console.log(res.fileList)
  },
  fail: err => {
    console.error(err)
  },
  complete: res => {
    console.log(res)
  }
})

// 或如下传参
wx.cloud.getTempFileURL({
  fileList: ['cloud://test.png'], // 对象存储文件 ID 列表,最多50个,从上传文件接口或者控制台获取
  success: res => {
    console.log(res.fileList)
  },
  fail: err => {
    console.error(err)
  },
  complete: res => {
    console.log(res)
  }
})

# 3. 完整示例

在小程序的任何一个页面 js 替换如下代码,cloud://test.png 替换成自己存在的文件 cloudID

将在页面载入时,会自动启动获取链接任务

传入封装的获取链接方法,可以是一个 CloudID 字符串,也可以是一个数组

Page({
  async onLoad() {
    const result = await this.getTempFile('cloud://test.png',500)
    console.log(result)
  },
  /**
   * 获取微信云托管对象存储文件的临时访问地址
   * @param {*} fileID 对象存储文件ID,可以是单个fileID,也可以是 ID 列表
   * @param {*} time 有效时间,单位秒
   */
  async getTempFile(fileID, time = 86400) {
    const list = (typeof fileID === 'string' ? [fileID] : fileID).map(item => {
      return {
        fileID: item,
        maxAge: time,
      }
    })
    return await wx.cloud.getTempFileURL({
      fileList: list
    })
  }
})

# 资源复用

# 资源复用

如果是资源复用,需要先进行初始化,初始化过程是异步,需要在业务中加以处理

在小程序 app.js 中粘贴如下代码,记得修改相关的信息,封装 getTempFileURL 可以参考上面例子,唯一不同点就是 wx.cloud 替换,其他基本一致

App({
  logger:require('./log.js'),
  async onLaunch() {
    const c1 = new wx.cloud.Cloud({
      resourceAppid: 'wx886699112233', // 环境所属的账号appid
      resourceEnv: 'prod-weruntest', // 微信云托管的环境ID
    })
    await c1.init()
    this.cloud = c1 // 在页面 js 中,可以使用getApp().cloud
    this.cloud.getTempFileURL({
      fileList: ['cloud://test.png'] // 对象存储文件 ID 列表,最多50个,从上传文件接口或者控制台获取
    }).then(res => {
      console.log(res.fileList)
    }).catch(error => {
      console.error(err)
    })
  }
})