微信小程序云函数node.js实现多个文件打包成压缩包并上传到云存储

// 云函数入口文件
const archiver = require('archiver')
const cloud = require('wx-server-sdk')
const fs = require('fs')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

// 云函数入口函数
// event中传入文件的fileID列表
exports.main = async (event, context) => {
  let output = fs.createWriteStream('/tmp'+ '/dist.zip')
  // 设置压缩级别
  const archiveObject = archiver('zip', {
    zlib: {
      level: 9
    } // Sets the compression level.
  })

  // 捕捉警告
  archiveObject.on('warning', function (err) {
    if (err.code === 'ENOENT') {
      // log warning
    } else {
      // throw error
      throw err
    }
  })

  // 明确捕获此错误
  archiveObject.on('error', function (err) {
    throw err
  })

  

  // 将数据归档到流文件中
  archiveObject.pipe(output)
  
  const wxContext = cloud.getWXContext()
  const fileIDList = event.fileIDList
  for (var item in fileIDList) {
    var res = await cloud.downloadFile({
      fileID: fileIDList[item],
    })
    var buffer = res.fileContent
    var string = fileIDList[item].split('/')
    archiveObject.append(buffer, {
      name: string[4]
    })
  }
  await archiveObject.finalize()
  //return "success"
  //上传到云存储并返回fileID
  var num = Math.round(Math.random()*100000000000)
  const fileStream = fs.createReadStream('/tmp'+ '/dist.zip')
  return await cloud.uploadFile({
    cloudPath: './作业合并的压缩包/dist'+num+'.zip',
    fileContent: fileStream,
  })
  
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值