收藏
回答

wx.uploadFile上传文件到云函数,如何解释body?

https://docs.cloudbase.net/service/access-cloud-function

参考文档如上。

1、小程序端,用wx.uploadFile上传文件,访问云函数的http接入服务;

2、云函数端event中获取到event.body的文件内容,看上去象是base64的字符串;

3、现在想获取并解析该文件内容,并保存文件到云存储。

有谁做过这样的事吗?event.body的格式转换试了很久没成功,文件保存到云存储后,都是坏文件。

回答关注问题邀请回答
收藏

2 个回答

  • 跨商通
    跨商通
    2023-01-03

    1、云函数中收到的event内容如下:

    {body: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,headers:{06d7542462b90dfe207b7746150b6b9c:tag,connection:keep-alive,content-length:4053,content-type:multipart/form-data; boundary=--------------------------204553655389695640482081,host:cloud.cross2pay.com,referer:https://servicewechat.com/wx7ef89f8228de2224/devtools/page-frame.html,user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.06.2212011 MicroMessenger/8.0.5 Language/zh_CN webview/,x-client-proto:https,x-client-proto-ver:HTTP/1.1,x-forwarded-for:114.254.2.56, 111.202.117.152,x-forwarded-proto:https,x-nws-log-uuid:18395510009296570843,x-origin-host:cloud.cross2pay.com,x-real-ip:111.202.117.152,x-stgw-time:1672730685.640,x-tencent-ua:Qcloud},httpMethod:POST,isBase64Encoded:true,multiValueHeaders:{06d7542462b90dfe207b7746150b6b9c:[tag],connection:[keep-alive],content-length:[4053],content-type:[multipart/form-data; boundary=--------------------------204553655389695640482081],host:[cloud.cross2pay.com],referer:[https://servicewechat.com/wx7ef89f8228de2224/devtools/page-frame.html],user-agent:[Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.06.2212011 MicroMessenger/8.0.5 Language/zh_CN webview/],x-client-proto:[https],x-client-proto-ver:[HTTP/1.1],x-forwarded-for:[114.254.2.56, 111.202.117.152],x-forwarded-proto:[https],x-nws-log-uuid:[18395510009296570843],x-origin-host:[cloud.cross2pay.com],x-real-ip:[111.202.117.152],x-stgw-time:[1672730685.640],x-tencent-ua:[Qcloud]},path:/upload,queryStringParameters:{},requestContext:{appId:1305413971,envId:cross2pay-0gbijhfn93e28715,requestId:e2a69c5b227f715867488a0c282f50b0,uin:100018362999}}
    
    2023-01-03
    有用
    回复
  • 杨泉
    杨泉
    2023-01-03

    在云函数中,`event.body` 是小程序端传来的请求的正文内容。


    当小程序使用 `wx.uploadFile` 上传文件到云函数时,它会将文件内容作为请求正文发送到云函数。根据你的描述,这些内容看起来像是 base64 编码的字符串。


    要从 `event.body` 中获取并解析文件内容,你可以使用 Node.js 的 `Buffer` 和 `base64` 模块。例如,你可以这样解码 base64 字符串并将其保存为文件:


    const base64 = require('base64');
    const fs = require('fs');
    
    exports.main = (event, context) => {
      const fileContent = base64.decode(event.body);
      fs.writeFileSync('/tmp/file.txt', fileContent);
    };
    



    之后你就可以将文件上传到云存储了。


    希望这些信息能帮到你!如果你有更多问题,欢迎来讨论。


    2023-01-03
    有用
    回复 1
    • 跨商通
      跨商通
      2023-01-03
      没能成功。请参考我下面的event整个数据包,其中有body的字符串。该http请求体的格式为content-type:multipart/form-data,且isBase64Encoded:true;真实上传的是一张png图片。
      2023-01-03
      回复
登录 后发表内容