最近接手一个项目,需要上传对应的奖项,以及佐证材料
也就是。。一个字符串,对应一张图片、需要多组字符串对应多组图片
其实这都好处理,关键就是,图片要如何上传给后端??
有一说一,光效果我就做了好久,图片效果代码我就不上传了分享了,我这边分享一下相关的测试代码,主要是分享一下如何上传图片给后端的方式
以下是VUE的一个组件,可以直接通过这个组件进行测试,即可成功。
这里强调一下,后端使用的数据传输方式是通过 multiple="multiple" 的方式进行传输的
<template>
<form id="form1" action="/" method="post" enctype="multipart/form-data" class="input-file">
<div>
<input type="text" id="avatval" placeholder="请选择文件···" readonly="readonly" style="vertical-align: middle;"
value="111" @click="uppic" />
<!-- <label for="profile_pic" id="avatval">上传</label> -->
<input multiple="multiple" type="file" id="profile_pic" name="profile_pic" accept=".jpg,.jpeg,.png"
@change="filechange">
</div>
<div>
<button type="button" id="btn" @click="meg()">提交</button>
</div>
</form>
</template>
<script>
import axios from 'axios';
import eventBus from '@/util/eventbus.js'
export default {
namne: 'mytry',
methods: {
meg() {
console.log(document.getElementById('profile_pic').files)
let ava = document.getElementById('avatval');
let pro = document.getElementById('profile_pic')
console.log(pro.files)
// console.log(pro.files[0].lastModified)
ava.innerHTML = pro.files[0].name
let mydata = new FormData()
mydata.append('file',pro.files[0])
axios.post('http://localhost:8081/testApi/test',mydata).then(res=>{
console.log(res)
})
},
uppic() {
// 执行 id 为profile_pic 的点击事件方法
let pro = document.getElementById('profile_pic')
pro.click();
},
filechange() {
let ava = document.getElementById('avatval');
let pro = document.getElementById('profile_pic')
// console.log(pro.files)
console.log(pro.files[0])
ava.value = pro.files[0].name
// console.log(pro.files[0].name)
// console.log(ava.value)
eventBus.emit('eventFrom',pro.files[0])
}
},
created(){
console.log("mytry 组件")
}
}
</script>
<style>
/* 隐藏原有的样式 */
input[type='file'] {
border: 0px;
display: none;
}
.input-file {
margin: 2px 3px;
}
#avatval {
padding: 3px 6px;
padding-left: 10px;
border: 1px solid #E7EAEC;
width: 200px;
height: 25px;
line-height: 25px;
border-left: 3px solid #3FB7EB;
background: #FAFAFB;
border-radius: 5px;
}
</style>
说一下这边注意的地方吧,
这三个分别是上传的格式,input的type上传文件类型 以及文件接受的内容
需要注意的是,如果需要上传多个图片,其实可以通过
创建一个循环,自定义的获取元素,这边定义为pro 好了,pro.files[0] 这边记得就算是保存在data(){}数据里面,也一样要带下标,不然后端会无法接受,以及当存在多个图片元素需要上传的时候,可以通过for循环,或者其他的循环进行遍历添加到表单当中。
或许有人会问了,这样不会把之前添加的覆盖掉吗,3个最后只剩1个?
程序的回答是,不会的。具体缘由,可以自行查阅以及尝试。因为我也不是很清楚。。。
这里展示一下console.log(pro.files)的样式
以及接口数据传输成功的样式
multipartFileList 是我传输的文件
重点就是这么多,最需要注意的就是 pro.files 这边, 以及数据传输都要以 pro.files[0] 带明确的下标进行。
这个文件传输,光样式就改了好多次,最后接口对接,也是第一次对接这种类型的接口,整了我3天吧,最后一天还是从下午3点一直对接到晚上7点才把测试接口对上。有一大部分原因是因为疫情,网上打字交流太慢了
哎,又是掉头发的一天,不过好在,将这个问题解决了