位置: 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脚手架)

  • 天眼查企业查询个体工商户信息教程

    天眼查企业查询个体工商户信息教程

  • 学会以下五条,小品牌将迎来自己的春天(五个学会)

    学会以下五条,小品牌将迎来自己的春天(五个学会)

  • oppo手机来电闪光灯在哪里设置(oppo手机来电闪灯怎么设置的)

    oppo手机来电闪光灯在哪里设置(oppo手机来电闪灯怎么设置的)

  • oppo手机怎么删除联系人(oppo手机怎么删除其他内存清理)

    oppo手机怎么删除联系人(oppo手机怎么删除其他内存清理)

  • 小新14和air14的区别(小新14和air14区别)

    小新14和air14的区别(小新14和air14区别)

  • 打座机提示用户正忙(打座机提示用户忙是怎么回事)

    打座机提示用户正忙(打座机提示用户忙是怎么回事)

  • 电闸空开推上去嘭的跳下来(空开的闸推不上去)

    电闸空开推上去嘭的跳下来(空开的闸推不上去)

  • 通用串行总线控制器是什么(通用串行总线控制器没有apple mobile)

    通用串行总线控制器是什么(通用串行总线控制器没有apple mobile)

  • wps字体加粗怎么弄(wps字体加粗在哪里)

    wps字体加粗怎么弄(wps字体加粗在哪里)

  • pandownload被限速怎么恢复(pandownload被限速怎么办)

    pandownload被限速怎么恢复(pandownload被限速怎么办)

  • 激光打印机卡纸的原因(激光打印机卡纸怎么办)

    激光打印机卡纸的原因(激光打印机卡纸怎么办)

  • ie怎么截图(ie游览器怎么截图)

    ie怎么截图(ie游览器怎么截图)

  • 苹果6p小白球怎么设置(苹果6sp小白球怎么设置)

    苹果6p小白球怎么设置(苹果6sp小白球怎么设置)

  • 联想电脑鼠标不动了怎么办(联想电脑鼠标不动就直接休眠)

    联想电脑鼠标不动了怎么办(联想电脑鼠标不动就直接休眠)

  • 荣耀al10是什么型号(华为荣耀al10价格是多少钱)

    荣耀al10是什么型号(华为荣耀al10价格是多少钱)

  • 国产苹果x是什么基带(苹果x是中国产的还是美国产的)

    国产苹果x是什么基带(苹果x是中国产的还是美国产的)

  • 支付宝里的证件照在哪里(支付宝里的证件怎么删除)

    支付宝里的证件照在哪里(支付宝里的证件怎么删除)

  • 如何开通华为pay(如何开通华为小艺)

    如何开通华为pay(如何开通华为小艺)

  • 计算机存储单元中存储的(计算机存储单元中存储的内容是)

    计算机存储单元中存储的(计算机存储单元中存储的内容是)

  • 淘宝在哪抢红包(淘宝抢红包有什么技巧)

    淘宝在哪抢红包(淘宝抢红包有什么技巧)

  • 苹果x是不是双摄像头(苹果x是不是双层主板)

    苹果x是不是双摄像头(苹果x是不是双层主板)

  • iphone11如何关机(iphone11如何关机清理内存)

    iphone11如何关机(iphone11如何关机清理内存)

  • qq防沉迷怎么解除(qq防沉迷系统怎么解)

    qq防沉迷怎么解除(qq防沉迷系统怎么解)

  • oppo手机黑屏显示时间(oppo手机黑屏显示充电图标)

    oppo手机黑屏显示时间(oppo手机黑屏显示充电图标)

  • 关闭自动重建图片缓存(关闭自动重新启动会怎样)

    关闭自动重建图片缓存(关闭自动重新启动会怎样)

  • MAC如何保存土豆网的视频找不到下载链接(macbook怎么保存)

    MAC如何保存土豆网的视频找不到下载链接(macbook怎么保存)

  • ddhelper32.exe进程安全吗.是病毒吗 ddhelper32是什么进程(tdxcef.exe进程)

    ddhelper32.exe进程安全吗.是病毒吗 ddhelper32是什么进程(tdxcef.exe进程)

  • 分割网络损失函数总结!交叉熵,Focal loss,Dice,iou,TverskyLoss!(网络分割算法)

    分割网络损失函数总结!交叉熵,Focal loss,Dice,iou,TverskyLoss!(网络分割算法)

  • 计提环境保护税怎么计算
  • 商贸企业出口进项税会计分录汇总
  • 补缴以前年度房产税以及滞纳金
  • 发票打印机贵吗
  • 增值税减免所得税填在哪一栏
  • .申报表税源编码怎么填
  • 为企业担保
  • 年底向员工客户发放、赠送实物的怎么缴个税
  • 合并会计报表编制讲解视频
  • 处理报废的固定资产
  • 银行存款支付比例怎么算
  • 赠品折扣计算法
  • 外派人员的一次工作总结
  • 单位参加城镇职工基本养老保险基数怎么填
  • 独资企业需要交企业所得税吗
  • 资产损益表怎么看
  • 计提坏账准备和发生坏账准备分录
  • 库存商品结转成本摘要怎么写
  • 没有及时去做财务会计制度备案怎么办?
  • 影响盈利能力的外部因素
  • 资产处置收益计入哪个会计科目
  • 长期股权投资是金融性资产吗
  • 季度申报利润表怎么填
  • 应付账款借方余额怎么平账
  • 暂停装修
  • 鸿蒙侧边菜单
  • 设备维保费计算标准
  • 桌面图标被篡改怎么办
  • 中秋买东西有讲究吗?
  • 鸿蒙系统怎么设置导航键
  • kb4499164安装失败怎么办
  • 销售房产营业税怎么算
  • 内部员工租房租金合法吗
  • 会计科目明细分类科目表
  • 高手成长礼包
  • 一列火车穿过一条隧道,已知火车长450米,隧道长750米
  • 增值税按简易计价方式
  • yolov5实例分割原理详解
  • 从零开始作者
  • 人工智能答案
  • 申报表中的免税销售额是收入吗
  • java上界通配符Animal Dog
  • mac m1 安装windows
  • 逾期包装物押金收入计入什么科目
  • mongodb常用语句
  • linux中mongodb启动
  • 发票勾选后什么时候开票
  • 0税率可以抵扣进项税吗
  • 专项储备期末有余额吗
  • 长期股权投资投资损益的确认
  • 一般纳税人商贸企业的税负是多少
  • 应交增值税结转账务处理
  • 专项储备 科目
  • 对公帐户资金转入个人帐户规定
  • 应付款多付了不可退回怎么做会计分录
  • 分公司内部管理模式
  • mybatis报错invalid bound statement
  • windows2008防火墙允许远程桌面
  • centos真机安装后只有lo
  • centos 任务计划
  • fedora19
  • unix操作系统有何特点?
  • freebsd使用
  • windowsxp如何清理磁盘
  • windows8怎么查看所有程序
  • 邮件传输过程中都使用哪些协议
  • vps禁用ipv6
  • Extjs4中的分页应用结合前后台
  • shell date 设置日期
  • 游戏开发u3d
  • js鼠标移入事件
  • 获取jquery对象
  • javascript用处
  • node搭建项目
  • viewstock
  • 安卓中的HTTP编程
  • 江苏 国税
  • 车船税补办
  • 股权转让本人不签字可以吗
  • 冀地是哪里
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设