gpt4 book ai didi

reactjs - 如何从 React.js 发送带有图像的多部分/表单数据?

转载 作者:行者123 更新时间:2023-12-04 12:46:14 24 4
gpt4 key购买 nike

我正在尝试使用 react 表单将表单发送到我的 Express.js 后端。它只发送文本而不发送文件。通过表单发送文件时是否需要建立一个 FormData ?
这是我在 App.js 上的表单

    class App extends Component {
constructor(props) {
super(props);
this.state={
inputTopValue:'',
inputBottomValue:'',
inputImageValue: '',
}
this.handleTopChange = this.handleTopChange.bind(this);
this.handleBottomChange = this.handleBottomChange.bind(this);
this.handleImageChange = this.handleImageChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}

handleTopChange(event) {
this.setState({inputTopValue: event.target.value});
}

handleBottomChange(event) {
this.setState({inputBottomValue: event.target.value});
}

handleImageChange(event) {
this.setState({inputImageValue: event.target.value
}

handleSubmit(event) {
event.preventDefault();
fetch('api/learning', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
},
body: JSON.stringify({
topstuff: event.target.topstuff.value,
bottomstuff: event.target.bottomstuff.value,
pic1: event.target.myimage.value

})
})
}

render() {
return (
<div className="App">
<form onSubmit={this.handleSubmit} id="myform" encType="multipart/form-data">
<input type="text" name="topstuff" placeholder="title" onChange={this.handleTopChange} value={this.state.inputTopValue} /> <br/>
<input type="text" name="bottomstuff" placeholder="body" onChange={this.handleBottomChange} value={this.state.inputBottomValue} /><br/>
<input type="file" name="myimage" onChange={this.handleImageChange} value={this.state.inputImageValue} /><br/>
<input type="submit" value="yeah boy" />
</form>
</div>
);
}
}

export default App;

如果需要构建 FormData 并且我仍然需要对其进行字符串化,请指导我构建它。

最佳答案

您抓取的图片不正确,您需要使用 files , 不是值,像这样:

this.setState({inputImageValue: event.target.files[0]})

然后构建FormData:
let formData = new FormData();
formData.append('pic1', event.target.myimage.files[0]);
formData.append('topstuff', event.target.topstuff.value);
formData.append('bottomstuff', event.target.bottomstuff.value);

最后删除 JSON.stringify因为您不需要它,请将其替换为 formData以上

顺便说一句:由于您直接通过 DOM 而不是通过状态引用表单的值,因此您可能需要考虑:
  • 一起摆脱状态
  • 或者开始使用 state 并开始通过 state
  • 引用表单的值

    关于reactjs - 如何从 React.js 发送带有图像的多部分/表单数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47168659/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com