Vant Uploader上传文件 + 提交按钮上传(前后端)

1 篇文章 0 订阅

一、需求及前言

公司项目需要,使用安卓版PDA对设备故障进行报修。①在提交表单的时候需要同时提交故障照片,②图片单选

上传组件使用了 Vant v2.12.47 中的 Uploader 组件,但是官方文档只是对单个组件的前端说明。最近才开始用 Vant,不太熟悉,在网上找了些使用方法,感觉零零碎碎的,而且不知道后端代码如何承接参数,也借鉴了一些,在此做一下使用方面的代码总结。

二、代码效果

其实很简单,就是选择照片->点击按钮提交表单和照片。
在这里插入图片描述

二、代码

1. template

<van-form @submit="onSubmit">
	<!-- ...中间表单的省略了... -->
	<van-field
        label="故障照片">
        <template #input>
        	<!-- 考虑到除了新增,修改时也要用到这个页面,且只有单张照片,而且数据库里直接存的路径,在这里可以展示一下已经上传的图片,也可以做点击预览 -->
            <van-image 
                :src="reportForm.reportPic" 
                fit="contain" v-if="reportForm.reportPic != ''"/>
            <!-- 图片选择,上传前判断格式,删除前做数据处理 -->
            <van-uploader 
                v-model="reportPic" 
                :after-read="afterRead" 
                :before-delete="beforeDelete"
                :max-count="1" />
        </template>
    </van-field>
    <div style="margin: 10px">
        <van-button block type="info" native-type="submit">提交</van-button>
    </div>
</van-form>

2. script

let forms = null; //设置公共变量,用来创建 FromData 对象,把文件带到后台
export default {
	data() {
        return {
            //表单
            reportForm: {
                equipRepairNo: '',//数据库主键
                //...
                reportPic: '', //这个是数据库中存的路径,可以用来直接预览
            },
            //组件中绑定的照片属性
            reportPic: [],
        }
    },
	methods: {
		//提交表单
        onSubmit(values){
            Dialog.confirm({
                title: '提示',
                message: '确认提交吗?'
            }).then(() => {
                //1.axios提交表单信息
				axios({
	                method: "post",
	                url: "/xxx/submit",
	                data: this.reportForm
	            }).then((res) => {
	                if(res.code == 200){
	                    Toast.success(res.msg);
	                    this.reportForm.equipRepairNo = res.data;
						//2.表单提交完成后再提交图片信息
	                    this.reportPicUpload();
	                }else{
	                    Toast.fail(res.msg);
	                }
	            });
            }).catch(() => {});
        },
        //图片选择后回调,这里就是重点了,就是在选择照片后,将照片的信息封装到FormData对象中
        //注意我这里是单图上传,所以直接new了,如果是多图的话,应该要考虑添加和删除FormData中的元素
		afterRead(file){
		    //创建FormData对象。上传图片需要转换二进制,这里要用到FormData
		    forms = new FormData();
		    //"file"表示给后台传的属性名字
		    forms.append("file", file.file); //获取上传图片信息
		},
		//图片上传的前置处理
		beforeRead(file) {
		    if (file.type !== 'image/jpeg' || file.type !== 'image/jpg' || file.type !== 'image/png') {
		        Toast('请上传图片格式');
		        return false;
		    }
		    return true;
		},
		//图片删除前回调,删除时将公共变量forms中的文件信息一并删除
		beforeDelete(file){
		    forms = null;
		    return true;
		},
        //图片上传,由提交按钮调用本方法实现手动上传
        reportPicUpload(){
            //如果文件列表为空,则不需要调用上传
            if(forms == null || forms.length == 0){
                return;
            }
            axios({
                method: "post",
                url: "/xxx/reportPicUpload",
                data: forms,
                params: {
                    equipRepairNo: this.reportForm.equipRepairNo
                }
            }).then((res) => {
                if(res.code == 200){
                    Toast.success(res.msg);
                    this.reportForm.reportPic = res.data;
                    this.getRepairInfoByNo(this.reportForm.equipRepairNo);
                }else{
                    Toast.fail(res.msg);
                }
            }).catch((err) => {
                Toast.fail("图片上传失败");
            });
        },
	}
}

3. 后台接收

//维修照片上传
@RequestMapping("/repairPicUpload")
@ResponseBody
public Map repairPicUpload(@RequestParam("file") MultipartFile file, @RequestParam Map<String, String> map) {
    String equipRepairNo = map.get("equipRepairNo");
    return equipmentRepairService.picUpload(file, equipRepairNo);
}

这里只是为了向大家展示后台接收参数的方法,更多关于使用 Java 上传文件到服务器的细节,可以参考我这篇博客


总结

这里只是对文件伴随表单提交的简单实现,实际上还可以对此进行许多的改进。

不足之处,还请多多指教。

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: vant uploader 是一个基于 Vue.js 的文件上传组件,可以方便地实现文件上传功能。它支持多文件上传、拖拽上传、图片压缩、图片裁剪等功能,同时还提供了上传进度条、上传成功/失败的提示等交互效果。使用 vant uploader 可以大大简化文件上传的开发工作,提高开发效率。 ### 回答2: Vant Uploader 是一个流行的上传组件,它提供了一个方便的界面供用户上传文件,同时可以实现限制文件类型、大小、数量等功能。Vant Uploader 还可以与后端服务进行交互,确保服务器可以正确处理文件上传请求。 Vant Uploader 具有以下特点: 1. 高度定制化:可以通过配置参数和键盘事件来自定义组件样式和交互方式。 2. 多类型文件上传:可以上传图片、视频、压缩文件等多种格式。 3. 多文件上传:多个文件可以通过 Vant Uploader 一次性上传。 4. 文件限制:可以限制上传的文件大小、类型和数量等。 5. 自动压缩:Vant Uploader 可以自动压缩图片文件,减小文件大小,提高上传速度。 6. 稳定可靠: Vant Uploader 提供了错误处理机制和进度条等功能,确保文件上传过程中不会出现意外错误。 总体而言,Vant Uploader 是一个功能强大、易于使用的文件上传组件,它可以提高用户上传文件的效率,并保证服务器可以正确处理上传请求,是开发者们开发网站或应用程序时的首选组件之一。 ### 回答3: VanT Uploader是一款强大的文件上传插件,它基于Vue.js框架开发,使得上传文件变得更加容易。 VanT Uploader使用非常简单,只需要在Vue组件中引入插件,然后使用指令v-uploader即可。你可以自定义组件的样式、文件类型、上传数量、文本语言等,满足不同上传场景的需求。 VanT Uploader还提供了丰富的事件和方法,包括文件验证、文件上传上传进度、上传成功/失败等等,帮助你进行更加精细的控制和定制。 相比于传统的文件上传方式,VanT Uploader的优点也十分明显。它支持分片上传,可以大大提高上传效率和稳定性。同时,也可以实现断点续传,避免用户上传中途出现意外导致的文件丢失,提升用户体验。 总之,VanT Uploader是一款高效、灵活、易用的文件上传插件,可以帮助你轻松实现多种文件上传场景,提升网站的上传功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值