位置: IT常识 - 正文

vant的Uploader 文件上传,图片数据回显问题

编辑:rootadmin
这篇文章主要介绍了vant的Uploader 文件上传,图片数据回显问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教 目录

推荐整理分享vant的Uploader 文件上传,图片数据回显问题,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

vant的Uploader文件上传,图片数据回显需求分析使用使用有赞Vant上传控件Uploader感悟数据处理后台处理vant的Uploader文件上传,图片数据回显需求

描述一下:点击上传证件照,选取需要的图片文件,然后图片在证件照栏展示

分析

看着挺简单的,用的是vant,里面有个文件上传的组件Uploader,它里面的文件预览模式是这样的

啊这。。。

指定不行,还好它还有自定义上传样式的,像这样

问题又来了:选取文件后没反应了!!!

其实也不是,没有反应就是没有对文件数据进行处理展示。

看一下Uploader的API:

参数file可以获取到一个文件对象

可以拿到文件名、文件类型、还有图片的base64格式的图片数据,那么我们只需要定义一个字段来接受这个图片数据,并绑定给展示证件照的图片框上就能实现图片回显了!

使用

结构部分

<van-field name="photo" label="证件照" colon class="tx"><template #input><van-image :src="')" /></template></van-field><van-uploader :before-read="beforeRead" :after-read="afterRead"><van-button icon="add-o">上传证件照</van-button></van-uploader>

方法部分

const afterRead = (file) => {state.staffPhoto = file.content;};vant的Uploader 文件上传,图片数据回显问题

Uploader里面呢还有一个API:before-read

我们一般在这个里面对图片的格式进行控制

举个栗子:

// 返回布尔值const beforeRead = (file) => {if (file.type !== "image/jpeg") {Toast("请上传 jpg 格式图片");return false;}return true;};

当然,我们也可以对图片的大小进行控制

自带的事件oversize

const onOversize = () => {Toast("文件大小不能超过 500kb");};

结构部分就是:

<van-uploader multiple :max-size="onOverSize" />

基本使用Uploader用到的功能就这些了,如果有其他的需求可以访问文档:

Uploader的基本使用

使用有赞Vant上传控件Uploader感悟

因为项目是公众号网页项目,公司前端推荐使用有赞Vant组件库,这让之前都是自己撸js,css的我仿佛打开了新世界的大门,废话不多说,上正文。

照着官方文档,我很快上手撸出了界面。

<van-uploader v-model="fileList" multiple :max-count="4"/>

因为需求说明最多只能上传4张图片,故使用了max-count来定义最大上传数量。

数据处理

我上传了一张照片,我们来看看fileList的数据是什么格式。

可以看到结果是一个数组array,每张图片都转为一个对象,对象下有两个键值分别是:content->图片base64编码(有赞这个Uploader很贴心的帮我们把图片转成base64格式流),file->一个文件对象,包含了文件名,上传路径,文件类型,文件大小等。

看完了数据,后端需要我们把文件传给他们,这里有一点需要注意,base64编码由于长度原因,请求方式必须用POST。

let photos = []that.fileList.forEach(v=> {let o = {base64Str: v.content,filename: v.file.name}photos.push(o)})

通过axios请求后台

axios.request({url: '/x/xxx/api',data: {photos: photos},method: 'POST'})后台处理@RequestMapping(value = "/api", method = RequestMethod.POST)public JSONObject xxx(@RequestBody JSONObject jsonObject) {JSONArray photos = jsonObject.getJSONArray("photos");if (photos.size() > 0) {for (int i = 0; i < photos.size(); i++) {JSONObject obj = photos.getJSONObject(i);String fileName = obj.getString("filename");String base64Str = obj.getString("base64Str");String directoryName = "xx/xx";String extension = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();InputStream inputStream = new ByteArrayInputStream(Base64.decodeBase64(base64Str.substring(base64Str.indexOf(",") + 1)));OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);client.putObject(bucketName, getRandomKey(directoryName, extension), inputStream);// extension指的是拓展名,例如".amr"}}}/*** 随机生成一个key* @return String 随机key*/public static String getRandomKey(String directoryName, String extension){StringBuffer key = new StringBuffer();if (StringUtils.isNotBlank(directoryName)) {key.append(directoryName);if (directoryName.charAt(directoryName.length() - 1) != '/') {key.append("/");}}key.append(System.currentTimeMillis());for (int i = 0; i < 10; i++) {key.append(randomStr.charAt(RandomUtils.nextInt(0, randomStr.length())));}if (StringUtils.isNotBlank(extension)) {if (extension.indexOf(".") == -1) {key.append(".");}key.append(extension);}return key.toString();}

后台处理需要注意下base64编码,我先把base64Str解码转为byte[]数组,因为项目使用阿里的OSSClient,上传过程还是比较简单。

整个流程做完了,感觉组件大大缩减了开发和调试时间。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。

本文链接地址:https://www.jiuchutong.com/zhishi/310392.html 转载请保留说明!

上一篇:js中变量对象如何理解(js变量作用范围)

下一篇:关于安装完vue脚手架后找不到vue问题(怎么安装vue-cli脚手架)

  • 电动牙刷怎么用的教程(电动牙刷怎么用)(电动牙刷怎么用视频 示范)

    电动牙刷怎么用的教程(电动牙刷怎么用)(电动牙刷怎么用视频 示范)

  • b站小窗口模式在哪里设置(b站小窗口模式在哪里设置ipad)

    b站小窗口模式在哪里设置(b站小窗口模式在哪里设置ipad)

  • 荣耀30s是否有指纹解锁功能(荣耀30有指纹吗?)

    荣耀30s是否有指纹解锁功能(荣耀30有指纹吗?)

  • qq送礼物当天几点到(qq送礼物当天几点到账)

    qq送礼物当天几点到(qq送礼物当天几点到账)

  • 三星s10重启了怎么一直在启动(三星s10重启了怎么关机)

    三星s10重启了怎么一直在启动(三星s10重启了怎么关机)

  • 能把汇编语言源程序翻译成目标程序的程序称为(能把汇编语言源程序)

    能把汇编语言源程序翻译成目标程序的程序称为(能把汇编语言源程序)

  • 苹果xr内存有几个版本(苹果xr的内存多少)

    苹果xr内存有几个版本(苹果xr的内存多少)

  • hsyu6e是什么网线(6类网线的标识)

    hsyu6e是什么网线(6类网线的标识)

  • 华为手机高温提示关闭(华为手机高温提醒在哪里关掉)

    华为手机高温提示关闭(华为手机高温提醒在哪里关掉)

  • 和家亲提示网关已离线(和家亲总是网关断开)

    和家亲提示网关已离线(和家亲总是网关断开)

  • 群聊名称怎么不让更改(群聊名称怎么不显示名字)

    群聊名称怎么不让更改(群聊名称怎么不显示名字)

  • 手机充电充到百分之80就不充了(手机充电要充满吗)

    手机充电充到百分之80就不充了(手机充电要充满吗)

  • 钉钉限制聊天功能怎么办(钉钉怎么设置不能聊天)

    钉钉限制聊天功能怎么办(钉钉怎么设置不能聊天)

  • 华为手机底部快捷键设置(华为手机底部快捷图标)

    华为手机底部快捷键设置(华为手机底部快捷图标)

  • 微信群主能删除成员发的信息吗(微信群主能删除别人发错的信息吗)

    微信群主能删除成员发的信息吗(微信群主能删除别人发错的信息吗)

  • 华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

    华为p20pro支持内存卡扩展吗(华为p20pro可以用内存卡吗)

  • ipad连热点网速慢怎么解决(ipadpro连热点好慢)

    ipad连热点网速慢怎么解决(ipadpro连热点好慢)

  • 手机换外屏需要拆机吗(手机换外屏需要拆后盖吗)

    手机换外屏需要拆机吗(手机换外屏需要拆后盖吗)

  • 天猫精灵不用的时候要断电吗(天猫精灵不用的时候需要一直插电吗)

    天猫精灵不用的时候要断电吗(天猫精灵不用的时候需要一直插电吗)

  • 单反自拍怎么设置(单反自拍怎么调正反)

    单反自拍怎么设置(单反自拍怎么调正反)

  • 智慧咸阳公众号如何关注(咸阳智监云平台)

    智慧咸阳公众号如何关注(咸阳智监云平台)

  • 怎样设置页脚(怎样设置页脚日期的格式)

    怎样设置页脚(怎样设置页脚日期的格式)

  • 转转可以用花呗吗(转转可以用花呗付款后商家多久到账)

    转转可以用花呗吗(转转可以用花呗付款后商家多久到账)

  • outlook中国选哪个时区(outlook国内能用吗)

    outlook中国选哪个时区(outlook国内能用吗)

  • 手机号能查到个人信息吗(手机号能查到个人住址吗)

    手机号能查到个人信息吗(手机号能查到个人住址吗)

  • Tesla都使用什么编程语言?(特斯拉适用于什么车型)

    Tesla都使用什么编程语言?(特斯拉适用于什么车型)

  • 物流辅助服务税率
  • 个体工商户税务申报一年几次
  • 医院都需要交什么税
  • 税控盘当月不抵扣怎么申报
  • 什么叫备品备件
  • 销售产品货款存入银行是什么凭证
  • 个人承包承租转包转租取得的所得
  • 车辆购置税发票电子版怎么查
  • 将外购货物分配给客户
  • 工会经费所得税前扣除
  • 地税迁移期间能开发票吗
  • 国税定额发票有效期是多长时间
  • 增值税17%和13%有什么区别
  • 银行账户设置数大于纳税人向税务机关提供数
  • 高速公路通行费发票怎么开
  • 租用仓库需要代扣代缴企业所得税吗
  • 所得税的计税依据
  • 失控发票进项税转出申报怎么填
  • 主营业务收入会计英语
  • 小规模纳税人金融服务税率
  • 帮老板支付的代款怎么做
  • 新成立的公司没有社保如何投标
  • 使用PHP similar text计算两个字符串相似度
  • 外购货物用于不动产在建工程
  • mac上读取ntfs
  • 中秋节福利产品清单
  • PHP:pg_client_encoding()的用法_PostgreSQL函数
  • 撤销银行账户
  • linux中断原理
  • 前端常用插件汇总
  • code ide
  • 房产税应计入哪个会计科目
  • 最小的电脑是多少寸的
  • php文件上传用什么请求方法
  • 好奇地看着我
  • php 电商
  • yolov5训练参数说明
  • 深入理解计算机系统 第三版 pdf
  • csdn创作激励
  • ghostnet改进
  • linux部署tomcat的war包
  • vue 路由
  • 前端经典面试题及答案
  • 定额发票新旧版区别
  • 职工食堂费用计入什么科目
  • 营业外收入会计分录怎么做
  • 购买农产品取得增值税普通发票可以抵扣吗
  • 注册劳务派遣公司需要验资吗
  • 固定资产租赁费的税率是多少
  • python中字符串与数字相乘的结果
  • 成本法合并抵消分红
  • 会计怎么实现财务自由
  • dedecms配置
  • 人民币报关可以收美金吗
  • 解决mysql数据库异常断电
  • 使用SQL语句创建一个名为:bookdb的数据库
  • 存货是指企业在生产经营过程中为销售或耗用
  • 企业筹建期间的费用处理
  • 其他应收款科目余额在贷方表示什么
  • 招待客人会计分录
  • 小规模纳税人销售要交税吗
  • 房租押金是什么意思?
  • 跨月销项负数发票分录
  • 对公账户转私人账户有限额吗
  • 二级分支机构不具有主体生产经营职能?
  • 应交土地增值税的三种情况
  • 地税报表如何填写
  • xp系统怎么设置系统启动项
  • xp系统无法启动怎么办
  • ubuntu删除vmware
  • win8关闭开机启动项
  • win10系统光盘制作
  • win8.2系统
  • java美化按钮
  • js链式编程的原理
  • node.js中的http.response.setHeader方法使用说明
  • shell判断文件是否存在且大小不为0
  • android 动画分类
  • javascript运用
  • 投资性房地产如何进行后续计量
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设