reactjs - ReactJs - Axios:上传图片
问题描述
我希望你一切都好,尤其是在新冠危机中。
我试图使用 axios 上传图像,但它总是为空,我无法修复它。我用过encType="multipart/form-data"
,<meta name="csrf-token" content="{{ csrf_token() }}"
但没有什么对我有用;我认为问题onChange{}
出在 ReactJs 官方文档中。
这是我的组件:
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import axios from 'axios';
export default class MedcineRegister extends Component
{
constructor(props)
{
super(props);
this.state = {
json:JSON.parse(props.data),//data received from a laravel controller used to implement the select option menu down below.
Specialite: '1',//initialization
image: '',
};
this.onChangeValue = this.onChangeValue.bind(this);
this.onSubmitButton = this.onSubmitButton.bind(this);
}
onChangeValue(e) {
this.setState({
[e.target.name]: e.target.value,//->this line is working only for Specialite
});
}
async onSubmitButton(e) {
e.preventDefault();
try {
const response = await axios.post('/medcine/registerR',{
Specialite: this.state.Specialite,
image: this.state.image,
});
console.log(response.data);//[{…}]0: {Specialite: "8" , image: null}
} catch (error) {
console.log("error in MedcineRegister.js");
}
}
componentDidMount () {
}
render()
{
return (
<div className="container">
<div className="card-body">
<form encType="multipart/form-data" onSubmit={this.onSubmitButton}>
<div className="col-md-6">
<select onChange={this.onChangeValue} name="Specialite" value={this.state.value} autoFocus>
{this.state.json.map(i => (
<option className="form-control" value={i.id}>{i.nom}</option>
))}
</select>
</div>
<div className="col-md-6">
<input id="file" type="file" name="file" onChange={this.onChangeValue} autoFocus/>
</div>
<div className="form-group row mb-0">
<button className="btn btn-primary">Submit</button>
</div>
</form>
</div>
</div>
);
}
}
if (document.getElementById('mr')) {
var data = document.getElementById(('mr')).getAttribute('data');
ReactDOM.render(<MedcineRegister data={data}/>, document.getElementById('mr'));
}
正如你们所看到的,consol一直在向我展示"image" : null
,请知道如何解决它
解决方案
文件输入的名称属性是“文件”。所以 onChangeValue 中的 this.setState 实际上是:
this.setState({
"file": e.target.value
});
图像永远不会被设置。
如果它是您要发布的文件,则需要进行一些更改。onChangeValue 函数中的 setState 应该是:
this.setState({
image: e.target.files[0]
});
要发布的数据必须作为 formData 发送
const formData = new FormData();
formData.append("Specialite", this.state.Specialite);
formData.append("image", this.state.image);
const response = await axios.post("/medcine/registerR", formData, {
headers: {
"Content-Type": "multipart/form-data"
}
});
推荐阅读
- javascript - 没有定义参数的Javascript函数调用?
- java - Spring WebClient: Passing username and password in request body to get a token
- json - Angular POST 方法只发送一个 JSON 数组
- firebase - 如何将数据从 Firestore 检索到我的列表
- swift - 如何使用 Firebase Auth + Combine 登录和防止登录
- nginx - 如何通过 ConfigMap 调试具有单个 IP 的入口控制器连接
- javascript - 从随机顺序切换到数组顺序
- excel - 从另一个子调用方法时出现无效参数错误
- java - 在 Tomcat 中使用石英调度程序和多个 WAR 中的作业
- mysql - 查询以过滤特定列值的重复行