我想发送带有文件的数据。从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对象。
答案 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