收藏
回答

使用wx.uploadFile上传图片,后端返回pdf文件流,前端生成pdf是空白的?

wx.uploadFile({
                url``,
                filePath: res.tempFilePath,
                name'file',
                responseType'arraybuffer',
                header: {
                  'content-type'"multipart/form-data",
                  'accept''application/json',
                  'Authorization''Bearer ' + wx.getStorageSync('userIds').token,
                },
                formData: {},
                success(res) {
                  console.log('res',res)
                  if (res.statusCode === 200) {
                    const fileManager = wx.getFileSystemManager();
                    const FilePath = wx.env.USER_DATA_PATH + "/" + "志愿报告.pdf";
                    fileManager.writeFile({
                      filePath: FilePath,
                      data: res.data,
                      encoding"binary"//编码方式 
                      successres => {
                        wx.openDocument({ //我这里成功之后直接打开
                          filePath: FilePath, 
                          showMenutrue,
                          fileType"pdf",
                          successresult => {
                            wx.hideLoading();
                          },
                          failerr => {
                            wx.hideLoading();
                            wx.showToast({
                              title'打开文档失败!',
                              icon'none'//默认值是success,就算没有icon这个值,就算有其他值最终也显示success
                              duration2000//停留时间
                            })
                          }
                        });
                      },
                      failres => {
                        wx.hideLoading();
                        wx.showToast({
                          title'导出失败!',
                          icon'none'//默认值是success,就算没有icon这个值,就算有其他值最终也显示success
                          duration2000//停留时间
                        })
                      }
                    })
                  } else {
                    wx.hideLoading();
                    wx.showToast({
                      title'生成失败!',
                      icon'none'//默认值是success,就算没有icon这个值,就算有其他值最终也显示success
                      duration2000//停留时间
                    })
                  }


                },
                fail(err) {
                  wx.hideLoading();
                  wx.showToast({
                    title: err,
                    icon'none'//默认值是success,就算没有icon这个值,就算有其他值最终也显示success
                    duration2000//停留时间
                  })
                }
              });
回答关注问题邀请回答
收藏

2 个回答

  • 不会计算鸡啊
    不会计算鸡啊
    05-06

    后面来的兄弟姊妹们不用折腾了,直接放弃在这个接口返回流直接生成文件吧……

    截止当前回复该帖时间,官方那边不知道是为了避规什么漏洞或者就是个bug,又或者小弟我没踩到足够的坑,但目前查找的相关帖子或文档结果都指向:

    如果在后台接口侧想通过这个接口返回的流来直接生成文档或其他文件,打开的该文件都是异常的,比如空白、乱码等等。所有的文件流数据返回需要走downloadFile接口返回并生成使用(打开),也就是必须要“两步式”完成,参考一楼里面对话回复的方案,通过downloadFile返回数据流,然后通过api生成对应的文件格式即可。

    若最新有变动或有说的不对的,麻烦踢一下我……

    05-06
    有用
    回复
  • Mr.Zhao
    Mr.Zhao
    2024-12-04

    找你们后端啊

    2024-12-04
    有用
    回复 10
    • 陈佩丽
      陈佩丽
      2024-12-04
      postman可以生成pdf,应该不关后端事
      2024-12-04
      回复
    • Mr.Zhao
      Mr.Zhao
      2024-12-04回复陈佩丽
      写个代码片段出来  能直接运行看结果的
      2024-12-04
      回复
    • 陈佩丽
      陈佩丽
      2024-12-04
      现在只能本地联调,下面是uploadFile返回的结果,能看出什么问题吗?
      2024-12-04
      1
      回复
    • Mr.Zhao
      Mr.Zhao
      2024-12-04回复陈佩丽
      data都乱码了,不是二进制
      2024-12-04
      回复
    • 陈佩丽
      陈佩丽
      2024-12-04
      多谢大佬,我找后端看看
      2024-12-04
      回复
    查看更多(5)
登录 后发表内容