收藏
回答

【云开发】怎么通过【云函数】写数据到【云存储】

问题模块 框架类型 问题类型 终端类型 AppID 基础库版本
云开发 小程序 Bug 客户端 wxf0e64c26dfd0086e 2.2.5

- 当前 Bug 的表现(可附上截图)

    返回结果:

    {"errorCode":1,"errorMessage":"user code exception caught","stackTrace":"Error: errCode: -501001 resource system error | errMsg: uploadFile:fail MultipartParser.end(): stream ended unexpectedly: state = PART_DATA; at uploadFile api; \n    at new CloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2679:28)\n    at returnAsCloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2731:16)\n    at Object.returnAsFinalCloudSDKError (/var/user/node_modules/wx-server-sdk/index.js:2745:13)\n    at Object.\u003canonymous\u003e (/var/user/node_modules/wx-server-sdk/index.js:2213:58)\n    at step (/var/user/node_modules/tslib/tslib.js:133:27)\n    at Object.throw (/var/user/node_modules/tslib/tslib.js:114:57)\n    at rejected (/var/user/node_modules/tslib/tslib.js:105:69)\n    at \u003canonymous\u003e\n    at process._tickCallback (internal/process/next_tick.js:188:7)"}



- 预期表现

    传入了要求的参数【可读流】,调用应该成功



- 复现路径

- 提供一个最简复现 Demo

    提供三种云函数调用case,均无法实现写数据到存储,本地测试创建的可读流没有问题

const cloud = require('wx-server-sdk')

const fs = require('fs')

const streamifier = require('streamifier')

var streamBuffers = require('stream-buffers');


cloud.init()


exports.main = async (event, context) => {


/* --------------------------case0---------------------------------

 var readerStream = new stream.PassThrough();

 readerStream.end(new Buffer('Test data.'));

 ----------------------------------------------------------------------*/


/* --------------------------case1---------------------------------

 let readerStream = streamifier.createReadStream(new Buffer('Test data.'))

 ----------------------------------------------------------------------*/


/* --------------------------case2---------------------------------

 var readerStream = new streamBuffers.ReadableStreamBuffer({

   frequency: 10,      // in milliseconds.

   chunkSize: 2048     // in bytes.

 });


 readerStream.put('Test data.');

 readerStream.stop();

 ----------------------------------------------------------------------*/


return await cloud.uploadFile({

        cloudPath: 'demo.txt',

        fileContent: readerStream

    })

}


最后一次编辑于  2018-11-21  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

3 个回答

  • 半寸灰
    半寸灰
    2018-11-21

    云函数的 空间只能读不能写 。就算能写也没意义,因为运行完就销毁。文件读写请用云存储

    2018-11-21
    赞同 1
    回复 3
  • 小熊
    小熊
    2018-11-21

    或者说【小程序云开发】只能做文件的【搬运工】,不能做文件的生【产者吗

    2018-11-21
    赞同
    回复
  • ..
    ..
    2018-11-20

    官方说的数据类型是fs.ReadStream

    用fs.createReadStream来获取流数据

    let readStream = fs.createReadStream('你的文件路径');
    2018-11-20
    赞同
    回复 4
    • 小熊
      小熊
      2018-11-21

      谢谢谢谢

      对的,这个太局限了,有什么办法能够写数据到【云存储】吗?

      云函数生成一些重要信息,需要存储,应该放在哪呢?

      2018-11-21
      回复
    • ..
      ..
      2018-11-21回复小熊

      可以把信息用 Buffer.from 转为buffer

      然后用cloud.uploadFile上传  fileContent 也支持buffer

      2018-11-21
      回复
    • ..
      ..
      2018-11-21回复..

      本来fs.createReadStream返回的就是一个Buffer....

      2018-11-21
      回复
    • 小熊
      小熊
      2018-11-21

      fs.ReadStream 想不到可以传 buffer

      非常感谢


      2018-11-21
      回复