1. 使用原生HTML <input type="file">
和JavaScript
vue复制代码
<template> | |
<div> | |
<input type="file" @change="handleFileChange" /> | |
<button @click="uploadFile">上传文件</button> | |
</div> | |
</template> | |
<script> | |
export default { | |
data() { | |
return { | |
selectedFile: null, | |
}; | |
}, | |
methods: { | |
handleFileChange(event) { | |
this.selectedFile = event.target.files[0]; | |
}, | |
uploadFile() { | |
if (!this.selectedFile) { | |
alert('请先选择一个文件!'); | |
return; | |
} | |
const formData = new FormData(); | |
formData.append('file', this.selectedFile); | |
// 使用fetch进行上传(示例未包含处理响应的代码) | |
fetch('YOUR_UPLOAD_URL', { | |
method: 'POST', | |
body: formData, | |
}).then(response => { | |
// 处理响应 | |
}).catch(error => { | |
// 处理错误 | |
}); | |
}, | |
}, | |
}; | |
</script> |
2. 使用Vue组件库(以Element UI为例)
首先,确保你已经安装了Element UI。
vue复制代码
<template> | |
<el-upload | |
class="upload-demo" | |
action="YOUR_UPLOAD_URL" | |
:on-success="handleSuccess" | |
:on-error="handleError" | |
:file-list="fileList" | |
:on-change="handleChange" | |
> | |
<el-button size="small" type="primary">点击上传</el-button> | |
<div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> | |
</el-upload> | |
</template> | |
<script> | |
// 引入Element UI的Upload组件 | |
import { ElUpload, ElButton } from 'element-ui'; | |
export default { | |
components: { | |
ElUpload, | |
ElButton, | |
}, | |
data() { | |
return { | |
fileList: [], | |
}; | |
}, | |
methods: { | |
handleSuccess(response, file, fileList) { | |
console.log('文件上传成功:', response); | |
}, | |
handleError(err, file, fileList) { | |
console.error('文件上传失败:', err); | |
}, | |
handleChange(file, fileList) { | |
console.log('文件列表发生变化:', file, fileList); | |
}, | |
}, | |
}; | |
</script> |
注意:Element UI的<el-upload>
组件已经封装了文件上传的大部分逻辑,包括发送请求到服务器、处理响应等。
3. 使用第三方库(以vue-upload-component
为例)
首先,你需要安装vue-upload-component
。
bash复制代码
npm install vue-upload-component --save |
然后,在你的组件中使用它:
vue复制代码
<template> | |
<file-upload | |
:url="'YOUR_UPLOAD_URL'" | |
@success="handleSuccess" | |
@error="handleError" | |
:multiple="false" | |
:auto-upload="true" | |
> | |
<template slot="file-list" slot-scope="props"> | |
<ul> | |
<li v-for="file in props.files" :key="file.id"> | |
{{ file.name }} | |
</li> | |
</ul> | |
</template> | |
</file-upload> | |
</template> | |
<script> | |
// 引入vue-upload-component | |
import fileUpload from 'vue-upload-component' | |
export default { | |
components: { | |
'file-upload': fileUpload | |
}, | |
methods: { | |
handleSuccess(response, file, fileList, event) { | |
console.log('文件上传成功:', response); | |
}, | |
handleError(error, file, fileList, event) { | |
console.error('文件上传失败:', error); | |
}, | |
}, | |
}; | |
</script> |
请注意,上述示例中的vue-upload-component
用法可能需要根据你安装的版本和具体需求进行调整。