使用multer发送状态和文件

时间:2018-08-16 17:58:27

标签: node.js reactjs multer

我想发送带有文件的数据。从React应用到节点服务器,

构造函数(道具){         超级(道具)

translatesAutoresizingMaskIntoConstraints = false

这引发了我 fd只读的错误 所以我搜索并找到

    this.state = {
        error:false,
        isProcessing:false,
        isPassed:false,
        isFaild:false,
        errorLine:'',
        data:'something'
    }

    this.handleChoose = this.handleChoose.bind(this)
}
handleChoose(e){
    const fd = new FormData()
    console.log(e.target.files)
    fd.append('file',e.target.files[0],e.target.files[0].name)
    fd = Object.assign({},fd,this.state)
    console.log(fd)
    axios.post(`/api/${this.state.area}`,fd)
                    .then((res)=>{
                        this.setState({"isPassed":true})
                    })
                    .catch((e)=>{
                        if(e){
                            console.log(e.response)
                            this.setState({'isProcessing':false,
                                                        'errorLine':e.response.data.error})
                        }
                    })
}                        

但是当我在服务器上打印时。

    fd.append('file',e.target.files[0],e.target.files[0].name)
    fd.append('state',this.state)
    console.log(fd)
    axios.post(`/api/${this.state.area}`,fd)
                    .then((res)=>{
                        this.setState({"isPassed":true})
                    })
                    .catch((e)=>{
                        if(e){
                            console.log(e.response)
                            this.setState({'isProcessing':false,
                                                        'errorLine':e.response.data.error})
                        }
                    })

它显示未定义作为输出。但是我正在将reqs.files作为必需的输出。

router.post('/somethin',upload,userVerifyMiddleWare,(reqs,resp)=>{
    console.log(reqs.body.state.data)
})

是multer对象。

2 个答案:

答案 0 :(得分:0)

fd只读错误是由于您将formData变量fd声明为const引起的,只需将其更改为let即可解决问题。

答案 1 :(得分:0)

我找到了解决方法。其实我不知道发送对象的方式,但是我们可以解决问题

fd.append('file',e.target.files[0],e.target.files[0].name)
fd.append('state-value-1',this.state.value1)
fd.append('state-value-2',this.state.value2)

在服务器上,我们可以

console.log(req.body) // to get all non file values
console.log(req.file) // for file