vue+type="file"文件上传思路
<template>
<div>
<div class="selectfile">选择文件</div>
<input type="file" accept=".doc,.docx,application/msword,.pdf,image/*,xls,xlsx"
name="file" ref="file" @change="uploadFiles" value="" multiple="multiple" class="set-opcity" />
<button type="button" @click="handleUpload">上传</button>
<div v-if="fileList.length>0" class="file-list">
<div v-for="(item,index) in fileList" :key="index"><span class="filename">{{item.name}}</span><span
@click="del(item,index)">删除</span></div>
</div>
<br>
<br>
<br>
<br>
<a href="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" download="vue.js" target="_blank">文件查看</a>
<br>
<br>
</div>
</template>
<script>
export default {
name: "Upload",
data() {
return {
fileList: []
}
},
methods: {
uploadFiles(value) {
console.log(value)
console.log(this.$refs.file.files)
this.fileList = [...this.fileList, ...this.$refs.file.files]
console.log(this.fileList)
},
handleUpload() {
if (this.fileList.length !== 0) {
this.fileList.forEach(item => {
this.upload(item)
})
} else {
alert("请选择文件")
}
},
upload(file) {
var formData = new FormData();
formData.append("file", file)
// 调用接口
},
// 删除附件
del(fileInfo, index) {
console.log(fileInfo)
console.log(index)
this.fileList.splice(index, 1)
}
}
}
</script>
<style scoped="scoped">
.selectfile {
position: absolute;
z-index: -1;
color: green;
padding: 4px 8px;
border: 1px solid #008000;
border-radius: 8px;
}
.set-opcity {
opacity: 0;
}
.file-list>div{
/* line-height: 28px; */
list-style: none;
display: flex;
justify-content: space-between;
margin-top: 18px;
padding: 0px 10px;
}
.filename{
width: 80%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
</style>
效果


浙公网安备 33010602011771号