vuejs でFormData つかってファイルアップロード
ついでなので、ファイルをpostするところまで追加してみる。
<div id="app"> <div> <h2>Select an image</h2> <input type="file" @change="onFileChange"> </div> <div v-if="image"> <h2>{{imgName}}</h2> <img :src="image" /> <button @click="removeImage">Remove image</button> <button @click="submitImage">Submit image</button> </div> </div>
var app = new Vue({
el: '#app',
data: {
image: '',
imgName: '',
uploadFile: ''
},
methods: {
onFileChange: function(e){
var files = e.target.files || e.dataTransfer.files;
if (!files.length) {
return;
}
if (!files[0].type.match('image.*')) {
return;
}
this.createImage(files[0]);
this.uploadFile = files[0];
},
createImage(file) {
var image = new Image();
var reader = new FileReader();
var vm = this;
reader.onload = function(e) {
vm.image = e.target.result;
};
reader.readAsDataURL(file);
vm.imgName = file.name;
},
removeImage: function(e) {
this.image = '';
this.imgName = '';
},
submitImage: function(e) {
var formData = new FormData();
formData.append("number", "123456");
formData.append('yourimg', this.uploadFile);
var config = {
headers: {
'content-type': 'multipart/form-data'
}
};
axios
.post('post.php', formData, config)
.then(function(response) {
console.log(response);
// response 処理
})
.catch(function(error) {
// error 処理
})
}
},
});
うーん、なんかすっきりしないが。 まあ、でも、結局はファイルはサーバー側でなんとかするしかないわけだし、多かれ少なかれこんな感じになるのでは。
