vue通过input实现文件上传支持post 和 get
时间: 2024-05-08 21:16:19 浏览: 10
Vue.js 并不是一个用来处理文件上传的框架,但是可以使用 HTML 中的 input 标签来实现文件上传,并且可以使用 axios 发送 POST 或 GET 请求来上传文件。
以下是一个使用 input 标签和 axios 实现文件上传的示例代码:
HTML 代码:
```
<template>
<div>
<input type="file" @change="handleFileUpload" />
<button @click="uploadFile">上传文件</button>
</div>
</template>
```
Vue 组件代码:
```
<script>
import axios from 'axios'
export default {
data() {
return {
file: null,
url: 'http://example.com/upload', // 上传文件的 URL
}
},
methods: {
handleFileUpload(event) {
this.file = event.target.files[0]
},
uploadFile() {
const formData = new FormData()
formData.append('file', this.file)
// 发送 POST 请求上传文件
axios.post(this.url, formData).then(response => {
console.log(response.data)
}).catch(error => {
console.log(error)
})
// 发送 GET 请求上传文件
// axios.get(this.url, { params: formData }).then(response => {
// console.log(response.data)
// }).catch(error => {
// console.log(error)
// })
},
},
}
</script>
```
在 handleFileUpload 方法中,我们使用 event.target.files[0] 获取到上传的文件对象,并将其赋值给 data 中的 file 属性。
在 uploadFile 方法中,我们创建一个 FormData 对象,将上传的文件添加到其中,并使用 axios 发送 POST 或 GET 请求上传文件。如果需要使用 GET 请求上传文件,只需要将 axios.post 替换为 axios.get,并将参数传递给 params 属性即可。
需要注意的是,使用 input 标签上传文件时,需要在 form 标签中添加 enctype="multipart/form-data" 属性,否则上传的文件会丢失。