# 获取文件临时链接

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

一次最多取 50 个。

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

- [公众号 H5](/minigame/dev/wxcloudrun/src/development/storage/h5/gettempurl)
- [服务端和其他客户端](/minigame/dev/wxcloudrun/src/development/storage/service/download)

## 请求参数

| 字段 | 说明 | 数据类型 | 默认值 | 必填 |
| --  | -- | -- | -- | --
| 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 | [错误码](/miniprogram/dev/wxcloudservice/wxcloud/reference/errcode.md) | Number |
| errMsg | 错误信息，格式 downloadFile:fail msg | String |

## 使用示例

### 1. Promise 风格

```js
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 风格

```js
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 字符串，也可以是一个数组

``` js
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 替换，其他基本一致

``` js
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)
    })
  }
})
```
