美文网首页
微信小程序:如何获取云开发存储文件

微信小程序:如何获取云开发存储文件

作者: 我的小小笔尖 | 来源:发表于2023-03-03 10:23 被阅读0次

运营近5年的小程序停用了,准备将云存储的文件下载下来,发现微信小程序开发工具不提供批量下载功能,网上找了资料,手动代码,大约需要下面几步。

1. 写云函数,获取下载地址

const CloudBase = require('@cloudbase/manager-node')

const { storage } = new CloudBase({
  envId: "env-memorytools-rele-42147a", // 云开发环境ID,进入云开发的时候可以从右上角进行复制
})

// 云函数入口函数
exports.main = async (event, context) => {
  
  const { action, params } = event

  switch (action) {
    // 获取云存储的所有文件信息
    case 'listDirectoryFiles': {
      return listDirectoryFiles(params)
    }
    // 获取云存储文件列表的临时下载链接
    case 'getTemporaryUrl': {
      return getTemporaryUrl(params)
    }
  }

  // 获取云存储的所有文件信息
  async function listDirectoryFiles(params) {
    const { path } = params
    
    // 接口功能:列出文件夹下的所有文件
    // 接口声明:listDirectoryFiles(cloudPath: string): Promise<IListFileInfo[]>
    return await storage.listDirectoryFiles(path);
  }


  // 获取云存储文件列表的临时下载链接
  async function getTemporaryUrl(params) {
    const { fileList } = params

    let newFileList = fileList.filter(file => file.Size !== '0').map(file => ({
      cloudPath: file.Key,
      maxAge: 86400 // 临时下载链接有效时间,单位:秒
    }))

    // 接口功能:获取文件临时下载链接
    // 接口声明:getTemporaryUrl(fileList: (string | TempUrlInfo)[]):Promise<Array.<FileUrlItem>>
    return await storage.getTemporaryUrl(newFileList);
  }

}

这里需要注意两点:
一是,进入云函数本地文件目录(我的是batch_download_cloud_files),打开命令行工具,安装 npm 模块,命令如下:

C:\08.miniprogram\memory4\cloudfunctions\batch_download_cloud_files>npm config set registry http://registry.npm.taobao.org
C:\08.miniprogram\memory4\cloudfunctions\batch_download_cloud_files>npm install @cloudbase/manager-node

二是,上传云函数时,需要选择:创建并部署:所有文件。目的是将本地安装的 npm 模块上传到云端。

2.创建一个page,通过点击按钮事件获取文件下载地址

page.wxml

<button type="primary" bindtap="getFileUrlList">获取文件url列表</button>

page.js

  getFileUrlList() {
    var that = this
    // 先调用获取文件列表的云函数
    wx.cloud.callFunction({
      name: 'batch_download_cloud_files',
      data: {
        action: 'listDirectoryFiles',
        params: {
          path: 'v4' // 这里可以使用根目录('/'),或者指定具体的目录
        }
      }
    }).then(res => {
      const { result } = res
      console.log(result)
      // 处理该文件列表,调用获取下载链接的云函数
      return wx.cloud.callFunction({
        name: 'batch_download_cloud_files',
        data: {
          action: 'getTemporaryUrl',
          params: {
            fileList: result
          }
        }
      })
    }).then(res2 => {
      const { result } = res2
      console.log(result)
      var urlList = []
      for (var i=0; i<result.length; i++) {
        urlList.push(result[i].url)
        console.log(result[i].url)
      }
      console.log(urlList)
    })
  },

3.下载

未找到直接下载的方法,我是将控制台打印出的下载地址复制出来,然后通过迅雷批量下载的。

4.遇到的三个问题

1)Invoking task timed out after 3 seconds
处理方法:更改云函数配置,将其超时设置调大些,如30秒

2)response size exceeded 1048576 bytes
未找到解决方法,报错的原因是云函数返回的对象或字符串太大,超过了1M。
我的处理方法是选择子目录,一个个目录获取下载地址,绕过该问题。

3)Cannot read property 'download_list' of undefined
未找到解决方法,未找到保存原因。

相关文章

  • 5行代码实现微信小程序图片上传与腾讯免费5G存储空间的使用

    本文介绍了如何在微信小程序开发中使用腾讯官方提供的云开发功能快速实现图片的上传与存储,以及介绍云开发的 5G 存储...

  • 微信小程序群功能开发-后端篇

    微信小程序群功能开发-后端篇微信小程序群功能开发-前端篇 之前介绍过了如何在微信小程序中获取群openGId相关的...

  • 微信小程序与云开发

    微信小程序基础概念 小程序云开发的三大基础能力:云数据库、云函数、云存储 Java、NodeJS、JavaScri...

  • 微信云开发 账号管理软件

    懒人账号管理微信小程序 一个用于存储账号和密码的小程序,使用微信小程序云开发,免服务器。 [https://git...

  • 微信小程序学习点滴

    **微信小程序学习点滴**《一》:如何获取时间,页面跳转,传递参数 **微信小程序学习点滴**《二》:开发者工具快...

  • 微信小程序 助你爬坑

    目录 已更新 微信小程序 开发简介微信小程序 账号注册及开发工具下载微信小程序 目录结构介绍微信小程序 获取App...

  • 2020-08-11 微信小程序无法获取unionid

    微信小程序无法获取unionid,首先要检查小程序是否已和微信开发平台关联,如何没有关联,需要先关联。 如果微信小...

  • 微信小程序云开发(一)

    什么是微信云开发 微信云开发是微信团队联合腾讯云推出的专业的小程序开发服务。 开发者可以使用云开发快速开发小程序、...

  • 微信小程序基础

    微信小程序介绍微信小程序开发工具的使用微信小程序框架文件微信小程序逻辑层微信小程序视图层微信小程序组件介绍微信小程...

  • 基于echart实现动态加载微信云平台数据库的数据

    微信小程序的云开发平台提供了三个基础能力:数据库、存储和云函数。我们这次利用微信小程序的云平台数据库的数据,通过e...

网友评论

      本文标题:微信小程序:如何获取云开发存储文件

      本文链接:https://www.haomeiwen.com/subject/abbsldtx.html