node文件上传请求转发

问题产生的原因,node服务启动,不是简单的转发,有一些功能在,但一些真正的功能还需要再一次转发到真正的后台去处理,就是所有的请求都会在这过滤,处理后才可能被转发。

如果用node直接代理过去,文件上传,同时还要提交其他的数据功能没有问题,把node功能用起来,就有问题了,个人觉得应该是在请求处理然后转发的过程中,对请求的参数造成了影响(具体当时没有仔细去研究,有知道的可以告知一声啊~),最后解决这个问题的方法是这样的,在node端将收到的文件数据通过writeSteam转化成数据流再传给后端,如果上传请求中附有属性等数据,则最后通过formdata模块转化后整体转发。具体可参考如下:(单纯的文件上传貌似没有这个问题的)

const handleReqBody = (ctx, body) => {
  if (ctx.is('multipart/form-data')) {
    const file = _.get(body, 'files.file')
    delete ctx.headers['content-type']
    // const formData = new FormData()
    // formData.append('file', createReadStream(file.path))
    // _.forEach(body.fields, (val, key) => {
    //   formData.append(key, val)
    // })
    return createReadStream(file.path)
  } else {
    return _.isObject(body) ? JSON.stringify(body) : body
  }
}

自此文件上传就有了阴影,附上一个前端处理文件上传的示例(直接upload组件的action就不多说了):

    uploadData (file) {
      // if (this._isEmpty(file)) {
      //   this.$Message.error('请先选择上传文件')
      // } else {
      let formData = new window.FormData()
      formData.append('file', file)
      formData.append('key1', val1)
      formData.append('key2', val2)
      this.$http.post('/file/productExcel', formData).then(res => {
        if (res.rtnCode === '000') {
          // do something
          this.$Message.success('上传文件成功')
        } else {
          this.$Message.error({
            content: res.rtnMsg,
            duration: 3
          })
        }
      }).catch(err => {
        console.log(err)
      })
      // }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值