I am trying to send an object which contains an image using Vue to a PHP API but honestly I don’t know how, I have my form
JavaScript
x
<form @submit='sendData'>
<div class="input-group">
<label for="name">Name</label>
<input type="text" @change="getText" name='text' id='text'>
</div>
<div class="input-group">
<label for="photo">Photo</label>
<input type="file" @change="getImage" name='photo' id='photo'>
</div>
</form>
export default{
data(){
return {
myData:{
text:'',
photo:''
}
}
}
and the getImage()
like this
JavaScript
getImage(event){
let formData = new formData();
formData.append('photo',event.target.files[0]);
this.myData.photo=formData;
}
getText(event){
this.myData[event.target.name]=event.target.value;
}
JavaScript
sendData(event){
event.preventDefault();
this.$http.post('myapi/api/user',this.myData);
}
I don’t know how to access this image in my PHP API and upload it to database. I tried accessing $_FILES but it’s an empty array
Sorry seems the problem is that I am sending some other data too and not only the formData
Advertisement
Answer
if you want to send an image to an api.
You form should specify the type de data you must send for
your form. you should add this.
JavaScript<form enctype="multipart/form-data">
<input type="text" class="form-control" v-model="myData.text" />
<input type="file" class="form-control" @change="handleUpload($event.target.files)" />
</form>
In your script you need to set this methods
JavaScript
data () {
return {
myData: {
text: '',
photo: null
}
}
},
methods: {
handleUpload(files) {
this.myData.photo = files[0];
},
saveProductImage () {
let formData = new FormData()
formData.append('text', this.myData.text);
formData.append('photo', this.myData.photo);
// Send here
}
}
Please check the docs