收藏
回答

求助:小程序如何使用FormData传二进制文件(binary)?

**背景:在飞书小程序开发(和微信小程序类似),需要获取到文本的图片信息,请求飞书接口返回的图片信息是一个二进制流,获取获取blob一个对象。需要把这个图片数据上传到公司的服务器上,变成自己公司的图片。

**公司的接口数据

--需要的数据效果在Google控制台效果是这样的

--请求头有用boundary包裹

--这个接口是原来存在的,在vue项目里可以跑通,现在我在小程序里面调用这个接口数据就传不过去。

**我获取到的数据形式

--在小程序里我能获取到图片的二进制流数据或者blob对象,如下

或这种格式

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

4 个回答

  • Say翼龙
    Say翼龙
    2022-12-20

    看看这个库: https://github.com/zyrong/miniprogram-polyfill/tree/master/packages/form-data

    2022-12-20
    有用
    回复
  • Code Weaver
    Code Weaver
    2022-02-21
    wx.chooseImage({
      count: 1, // 默认9
      sizeType: ["compressed"], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ["album", "camera"], // 可以指定来源是相册还是相机,默认二者都有
      success: (res) => {
        // 返回选定照片的本地文件路径列表,tempFilePath可以作为image标签的src属性显示图片
        var tempFilePaths = res.tempFilePaths;
        var tempFilesSize = res.tempFiles[0].size; //获取图片的大小,单位B
        if (tempFilesSize <= 3000000) {
          //图片小于或者等于3M时 可以继续
          wx.uploadFile({
            url: 'xxx',
            filePath: res.tempFilePaths[0],
            name: "xxx",
            header: {
              chartset: "utf-8",
              "content-type": "multipart/form-data"
            },
            formData: {
              token: xxx
            },
            success: (res) => {
             
            },
            fail: function(e) {
            }
          })
        } else {
          wx.showToast({
            title: "上传图片不能大于3M哦~",
            icon: "error"
          })
        }
      }
    });
    
    2022-02-21
    有用
    回复 4
    • 菜菜
      菜菜
      2022-02-21
      谢谢亲。我的数据是直接飞书那边返回了一个二进制流数据,没有涉及到wx.chooseImage这个方法。有什么方法能把我那个二进制数据以Form data,upload_file: (binary)传过去呢
      2022-02-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-21回复菜菜
      我不是回答你了吗  又问一遍?
      2022-02-21
      回复
    • 菜菜
      菜菜
      2022-02-21回复Mr.Zhao
      那个要存到本地在上传一次,我想问问能不能直接formData包着传
      2022-02-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-21回复菜菜
      小程序没有formdata对象  别光想了,先动手实现了再说
      2022-02-21
      回复
  • 菜菜
    菜菜
    2022-02-21

    两种尝试过的失败效果

    1.手动凭借请求头

    2022-02-21
    有用
    回复 1
    • 菜菜
      菜菜
      2022-02-21
      第二种
      2022-02-21
      回复
  • Mr.Zhao
    Mr.Zhao
    2022-02-21

    不要对返回值进行编码

    2022-02-21
    有用
    回复 11
    • 菜菜
      菜菜
      2022-02-21
      亲什么意思呢,我直接请求获取的是那一串乱码,加个response-type:blob,然后飞书返回的就是一个blob对象
      2022-02-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-21回复菜菜
      2022-02-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-21回复菜菜
      用wx.request获取buffer 然后文件api保存到本地获取临时路径然后wx.uploadFile上传。
      还可以用wx.downloadFile下载获取临时路径然后wx.uploadFile上传.
      2022-02-21
      1
      回复
    • 菜菜
      菜菜
      2022-02-21回复Mr.Zhao
      亲我现在获取到了数据,不能拿找个数据以我想要的格式Form data,upload_file: (binary)这样请求啊。我试了第一种方法,但是不确定下载路径怎么写,而且已经有了数据再把它存到本地再处理,请求图片数据多了这样是不是不太合理呢
      2022-02-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-02-21回复菜菜
      多看看文档吧
      2022-02-21
      1
      回复
    查看更多(6)
登录 后发表内容