javascript - Cómo enviar un archivo con $http.post en Vue.Js
¿Cómo puedo enviar un archivo con vue.js?
El siguiente código no me está funcionando:
<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>
Cuando hago console.log(this.request.file) obtengo FILE [object File].
Aquí está el .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;
}
Pero en PHP, no puedo obtener el archivo, la respuesta es: {} Sin propiedades.
Código PHP:
$request = json_decode(file_get_contents('php://input'));
$req = $request->data;
echo json_encode($req->file)
Respuesta #1
Agregar atributo ref al input:
<input ref="file-input" .../>
En el controlador deberías escribir la acción:
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
});
}
En el endpoint de PHP, tus archivos subidos estarán en el objeto de solicitud del formulario.
Respuesta #2
Usa la función append() de FormData:
var files = e.target.files[0];
var formData = new FormData();
formData.append('file', files);
this.$http.post('/data/getData.php', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
