How can I send a file with vue.js?
The following code is not working for me:
<span title="Upload" class="badge badge-info">
<input type="file" id="file" name="file" @change="uploadData" class="archive" > <i id="iarchive" class="fa fa-upload"></i>
</span>
When I make console.log(this.request.file)
I get FILE [object File]
.
Here is the .js:
uploadData: function(e) {
var files = e.target.files[0];
this.request.action = 'upload';
this.request.file = files;
console.log("FILE "+this.request.file);
this.$http.post('data/getData.php', {
data: this.request,
headers: {
'Content-Type': 'multipart/form-data'
}
}
).then(function(response) {
console.log("RESPONSE: "+response.body);
}, function(response) {
alert("error");
});
return false;
}
But in PHP, I can't get the file, the response is :{} No properties
.
PHP code:
$request = json_decode(file_get_contents('php://input'));
$req = $request->data;
echo json_encode($req->file)
To pass the file from the client to the backend, use the new FormData() object. In your case you can do something like: var params = new FormData(); params. append('data', this.
The simplest way to get started with Vue is to grab the development version script for it and add it to the head tag of your HTML file. Then you can start Vue code inside the HTML file inside of script tags. And have the Vue code connect up with an existing element on your HTML page.
Add ref attribute to input:
<input ref="file-input" .../>
In controller you should write action:
uploadFile: function () {
// try to log $refs object for deep understanding
let fileToUpload = this.$refs.fileInput.files[0];
let formData = new FormData();
formData.append('fileToUpload', fileToUpload);
this.$http.post ( 'data/getData.php', formData ).then(function () {
// success actions
});
}
In php endpoint your uploaded files will be in form request object.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With