Reactjs Django rest框架,React JS,Axios-包含图像文件的Post JSON数据
如何使用axios将图像文件上载到Django_Rest框架 我有一个简单的模型:Reactjs Django rest框架,React JS,Axios-包含图像文件的Post JSON数据,reactjs,django-rest-framework,axios,Reactjs,Django Rest Framework,Axios,如何使用axios将图像文件上载到Django_Rest框架 我有一个简单的模型: class Article(models.Model): title = models.CharField(max_length=120) text = models.TextField() img = models.ImageField(upload_to='article_images/', blank=True, null=True) create_time = model
class Article(models.Model):
title = models.CharField(max_length=120)
text = models.TextField()
img = models.ImageField(upload_to='article_images/', blank=True, null=True)
create_time = models.DateTimeField(default=datetime.utcnow, blank=True,
null=True
以及React JS中的简单形式:
class ArticleForm extends React.Component {
state= {
img: undefined
}
handleUpolad =(event)=>{
event.preventDefault();
const img=event.target.files[0];
this.setState({
img:img
})
}
handleFormSubmit = (event)=>{
event.preventDefault();
const title=event.target.elements.title.value;
const content=event.target.elements.content.value;
Axios.post('http://127.0.0.1:8000/api/',{
title:title,
text:content,
}).then(res=>console.log(res))
.catch(err=>console.log(err))
}
render() {
return (
<div>
<Form onSubmit={this.handleFormSubmit}>
<Form.Item label="Title" >
<Input placeholder="input placeholder" name='title' />
</Form.Item>
<Form.Item label="Content" >
<Input placeholder="input placeholder" name='content' />
</Form.Item>
<Form.Item label="Dragger" >
<div className="dropbox">
<input type='file' onChange={this.handleUpolad} name='img'>
</input>
</div>
</Form.Item>
<Form.Item >
<Button type="primary" htmlType="submit">Submit</Button>
</Form.Item>
</Form>
</div>
);
}
}
类ArticleForm扩展了React.Component{
状态={
img:未定义
}
handleUpolad=(事件)=>{
event.preventDefault();
const img=event.target.files[0];
这是我的国家({
img:img
})
}
handleFormSubmit=(事件)=>{
event.preventDefault();
const title=event.target.elements.title.value;
常量内容=event.target.elements.content.value;
轴心柱http://127.0.0.1:8000/api/',{
标题:标题,,
文本:内容,
}).then(res=>console.log(res))
.catch(err=>console.log(err))
}
render(){
返回(
提交
);
}
}
当我只发布标题和内容时,它的工作很好。如何使用Axios发布包含此数据的图像文件?我认为您可以利用 另外,我认为您不需要在状态中添加图像。您可以简单地将其保留为类变量。如果设置状态-将不需要重新渲染。为什么不避免呢 以下是修改后的代码和一些注释:
class ArticleForm extends React.Component {
pickedFile = null; // save the picked file in this
handleUpolad = event => {
event.preventDefault();
this.pickedFile = event.target.files[0];
}
handleFormSubmit = event => {
event.preventDefault();
let data = new FormData(); // creates a new FormData object
data.append('title', event.target.elements.title.value);
data.append('text', event.target.elements.content.value);
data.append('img', this.pickedFile); // add your file to form data
Axios.post('http://127.0.0.1:8000/api/', data)
.then(res=>console.log(res))
.catch(err=>console.log(err))
}
render() {
// your usual code
}
}
我想你可以利用这个机会 另外,我认为您不需要在状态中添加图像。您可以简单地将其保留为类变量。如果设置状态-将不需要重新渲染。为什么不避免呢 以下是修改后的代码和一些注释:
class ArticleForm extends React.Component {
pickedFile = null; // save the picked file in this
handleUpolad = event => {
event.preventDefault();
this.pickedFile = event.target.files[0];
}
handleFormSubmit = event => {
event.preventDefault();
let data = new FormData(); // creates a new FormData object
data.append('title', event.target.elements.title.value);
data.append('text', event.target.elements.content.value);
data.append('img', this.pickedFile); // add your file to form data
Axios.post('http://127.0.0.1:8000/api/', data)
.then(res=>console.log(res))
.catch(err=>console.log(err))
}
render() {
// your usual code
}
}