收藏
回答

请问能否使用云函数 发起POST 向后台服务器上传文件?

我现在遇到一个需求,就是需要从小程序端选择文件,选择文件post请求到后台服务。

但是因为小程序uploadfile不支持http(仅支持https)

所以考虑使用云存储以及云函数,先将所选择文件,上传至云存储,再由云函数调取,并向后台服务发起post请求,但是具体的 form-data传文件 不知道该怎么弄?

这个问题困扰我两天了,希望由大神教教我。

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

2 个回答

  • xplee
    xplee
    2022-03-30
    1. 从小程序上传文件到云存储直接用wx.cloud.uploadFile这个API;
    2. 其次,云函数中读取云存储中的文件(可以用cloud.downloadFile配合fs操作将云存储文件写到本地临时目录,用完后记得删除即可)并post给另外的服务,需要看这个服务的接口是什么样的,可以搜索下axios文件上传是怎么做的。比如下面这样:
    export const uploadFile = file => {
      const param = new FormData();
      param.append("file", file);
    
      const config = {
        headers: { "Content-Type": "multipart/form-data" }
      };
      axios.post("/third-api/path", param, config).then(res => {
        console.log(res);
      });
    

    };

    2022-03-30
    有用 1
    回复 5
    • 就这样吧
      就这样吧
      发表于移动端
      2022-03-30
      谢谢,上传云存储以及使用fs写在临时文件我都做了。只是最后一步,post后端,感觉应该是参数仍然传递有问题。我在网上查了很多例子,都参照的做了,都不成功。请求返回的状态码是500,提示“ Current request is not a multipart request“。大佬能帮忙在分析一下吗?
      2022-03-30
      回复
    • xplee
      xplee
      2022-03-30回复就这样吧
      用postman调一下接口,调通后再改代码
      2022-03-30
      1
      回复
    • 就这样吧
      就这样吧
      发表于移动端
      2022-03-30回复xplee
      Postman没问题,是通的。postman是post模式,选择form-data,然后选择File 点击选择上传文件。这样是可以正常请求的,但是我不会模拟“点击选择上传文件“这个操作。尝试了各种的创建可读流、传buffer啥的都没成功。
      2022-03-30
      回复
    • xplee
      xplee
      2022-03-30回复就这样吧
      开发者工具里面观察一下请求头,和postman有什么不一样吧,如果使用axios换成其他库也试一下,大概率还是axios写法的问题
      2022-03-30
      1
      回复
    • 就这样吧
      就这样吧
      发表于移动端
      2022-03-30回复xplee
      好的,感谢回复,我再研究研究。实在不行再向您请教。
      2022-03-30
      回复
  • 无言
    无言
    发表于小程序端
    2022-04-08

    配个ssl证书不是啥大事儿啊。小程序直接上传云存储,把拿到下载链接,通过云函数把链接传给服务器

    2022-04-08
    有用
    回复
登录 后发表内容