html部分,可以把input file的opacity设置为0,点击其父容器,即触发file
<input class="file" name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="update($event)"/>
axios的post请求,发送form数据部分,这样就可以无刷新的提交form数据到后台
update(e){
let file = e.target.files[0];
let param = new FormData(); //创建form对象
param.append('tweetPic',file,file.name);//通过append向form对象添加数据
//param.append('chunk','0');//添加form表单中其他数据
//console.log(param.get('tweetPic')); //FormData私有类对象,访问不到,可以通过get判断值是否传进去
let config = {
headers:{'Content-Type':'multipart/form-data'}
}; //添加请求头
axios.post('url/',param,config)
.then(response=>{
console.log(response.data);
})
}
【扩展】
使用form表单上传图片
<head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cdn.bootcss.com/vue/2.3.4/vue.js"></script>
<script src="https://cdn.bootcss.com/axios/0.16.2/axios.js"></script>
</head>
<body>
<form>
<input type="text" value="" v-model="name" placeholder="请输入用户名">
<input type="text" value="" v-model="age" placeholder="请输入年龄">
<input type="file" @change="getFile($event)">
<button @click="submitForm($event)">提交</button>
</form>
<script>
window.onload = function () {
Vue.prototype.$http = axios;
new Vue({
el: 'form',
data: {
name: '',
age: '',
file: ''
},
methods: {
getFile(event) {
this.file = event.target.files[0];
console.log(this.file);
},
submitForm(event) {
event.preventDefault();
let formData = new FormData();
formData.append('name', this.name);
formData.append('age', this.age);
formData.append('file', this.file);
let config = {
headers: {
'Content-Type': 'multipart/form-data'
}
}
this.$http.post('/upload', formData, config).then(function (res) {
if (res.status === 2000) {
/*这里做处理*/
}
})
}
}
})
}
</script>
</body>
</html>
来源:http://www.cnblogs.com/rachelch/p/8462877.html