van-uplaoder保存文件到后端,回显后端接口返回的数据

news2024/11/16 22:30:15

实现功能:在移动端使用van-uploader组件上传图片,然后调用接口保存到后端数据库,提交保存信息成功后,调用另外的接口返回数据用来回显uploaded的文件,(一般正常的返回数据的接口是个图片地址,可以直接显示),我现在遇到的功能是返回了一个图片地址,然后我需要在前端页面自己去调一次图片地址的接口。

 

 <div class="imgWrap">
            <!-- :max-count="3" -->
            <van-uploader
                :disabled="isUpload"
                :before-read="beforeUpHandle"
                :after-read="onRead"
                @click="emitCont"
                v-model="fileList"
                multiple
                :max-count="15"
                @delete="handleRemove"
            >
                <van-button
                    icon="photograph
"
                ></van-button>
                <div class="addImg">添加图片</div>
            </van-uploader>
        </div>

对van-uploader组件不熟悉的可以去官网自行查看

 

保存信息的接口代码:

这里要在文件读取完成后的回调函数中使用

 async function onRead(file: any, detail: any) {

            let formData = new FormData() //格式化必不可少,在里面添加接口需要传的参数

            formData.append('file', file.file)

            formData.append('sort', detail.index)

            getUploadKey(formData).then(res => {

                if (res.resultCode === '00') {

                    let result = res.data

                }

            })

        }

接下来是回显接口返回的数据在uploader,这里主要遇到的是v-model的fileList绑定的值,把接口获取的值直接赋值给fileList即可以。

1、获取接口的值,我这边假设为fetchData,我做了一个判断,fetchData有值才调用图片地址的数据

if (fetchData.value.length > 0) {

                //当回显的图片有多张时需要做一个循环

                for (let i = 0; i < fetchData.value.length; i++) {

                    let item =fetchData.value[i];

                    item = {

                        url: item.imgUrl, //这里的imgUrl后端接口返回的图片地址

                        sort: item.sort,   //这里的数据按照自己的实际情况添加,我是后面需要到sort才添加的,不然有url即可显示

                    }),

                        console.log(item.url, 'uuuu')

                     //开始调用图片地址接口,因为我这里图片接口返回的二进制流图片数据格式,前端需要处理才能显示。如下使用的是:

1、先设置axios接收参数格式为"arraybuffer"

2、转换为base64格式图片数据在img标签显示

3、return 'data:image/png;base64,' + btoa( new Uint8Array(res.data).reduce((data, byte) => data + String.fromCharCode(byte), '') );

                    axios({

                        method: 'get',

                        url: item.url,

                        headers: {

                            'XXX-XXX-TOKEN': XXXXXX,//需要到token的小伙伴借鉴

                        },

                        responseType: 'arraybuffer',

                    })

                        .then(res => {

                        //若是没有做这个obj的封装,图片将无法显示。

                            let obj = {

                                content: `data:image/png;base64,${btoa(

                                    new Uint8Array(res.data).reduce(

                                        (data, byte) => data + String.fromCharCode(byte),

                                        '',

                                    ),

                                )}`,

                                sort: item.sort,

                            }

                            fileList.value.push(obj)

                        })

                        .catch(err => {

                            reject(err.data)

                        })

                }

            }

 补充:van-uploader这个组件要回显图片两种方法:
1、提供图片的base64字符串
直接把base64字符串加前缀之后,封装成一个obj放入fileList,就可以直接回显图片

2、提供文件的二进制流
(这种能回显图片因为后端能接受这样的请求方式。但现在很多框架不支持没有完整请求头的请求,那么就会请求不到后端图片回显失败,这种方式还是有一定局限性的),我一开始用的这个方法就是没有实现回显所以又考虑转为base64格式来显示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/96774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

15 CPP函数重载

函数重载的细节&#xff1a; 1 使用重载函数时&#xff0c;如果数据类型不匹配&#xff0c;C尝试使用类型转换与形参进行匹配&#xff0c;如果转换后有多个函数能匹配上&#xff0c;编译将报错。 2 引用可以作为函数重载的条件&#xff0c;但是调用重载函数的 时候&#xff0…

javaSE - 认识字符串(String class),String类里面方法的使用,下半部分

一、字符, 字节与字符串 1.1、字符与字符串之间进行转换 字符串内部包含一个字符数组&#xff0c;String 可以和 char[] 相互转换 将整个字符数组转换成字符串 public static void main(String[] args) {char[] chars {a,b,c,d,e,f,g};String str new String(chars);Sys…

Sulfo-NHS-SS-biotin,CAS:325143-98-4介绍,生物素双硫键琥珀酰亚胺

英文名称&#xff1a;Sulfo-NHS-SS-biotin 化学式&#xff1a;C19H27N4NaO9S4 分子量&#xff1a;606.7 CAS&#xff1a;325143-98-4 纯度&#xff1a;95% 储存条件&#xff1a;-20C 结构式&#xff1a; 简介&#xff1a;磺基NHS SS生物素是一种可切割试剂&#xff0c;用…

【剧前爆米花--爪哇岛寻宝】抽象类和接口(上)——理论及逻辑理解

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaSE语法与底层详解》 文章分布&#xff1a;这是一篇关于抽象类和接口的文章&#xff0c;在本篇文章中我会介绍其相关的定义和语法&#xff0c;并且揭示接口和抽象类的运行逻辑&#xff0c;提高对面对象编程的理解。 目录 抽象…

吴恩达week6 ~批量梯度下降 指数加权平均 动量梯度下降 学习率衰减 Adam

文章目录前言一、小批量梯度下降 mini-batch1、batch gradient descent2、stochastic gradient descent3、mini-batch gradient descent二、指数加权平均1.什么是指数加权平均2、理解指数加权平均3、与普通求平均值的区别4、指数加权平均的偏差修正三、gradient descent with m…

Allegro批量替换过孔类型操作指导

Allegro批量替换过孔类型操作指导 Allegro支持批量替换过孔类型,具体操作如下 例如需要把这些VIA10的过孔全部替换成VIA8的过孔 选择菜单上面的Tool-padstack-Group edit 右击选择temp Group 选中需要替换的过孔 选完之后右击选择complete 弹出Padstack Map窗口,modify…

java中多线程、并发、并行、线程与进程、线程调度、创建线程的方式

多线程&#xff1a; 多线程比单线程快&#xff0c;前面简单介绍过&#xff1a;集合如果是不安全的&#xff0c;那么它就是多线程的&#xff0c;了解多线程之前&#xff0c;先了解什么是并发和并行。 并发&#xff1a;指两个或多个事件在同一个时间段内发生。 并行&#xff1…

高通平台开发系列讲解(AtCoP篇)AtCoP架构简介

文章目录 一、ATCoP简介二、ATCoP架构三、流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇讲介绍高通ATCoP的架构。 一、ATCoP简介 ATCoP(AT Command Processor)是高通平台对于AT命令处理的模块,通过它,我们可以实现对AT命令的修改和新增。ATCoP接收从串口…

[附源码]Python计算机毕业设计公司办公自动化系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

跟大佬展开激励讨论String的不可变性

目录 大佬证明&#xff1a; 我的证明&#xff1a; 后续 什么是不可变&#xff1f; String为什么不可变 为什么要设计成为不可变的呢&#xff1f; 1.首先我们最先可以想到的Java主要做的就是安全 2.其次是字符串常量池的需要 String真的不可变吗&#xff1f; ps&#…

平淡无奇,2022年终总结

1前言 一年又一年&#xff0c;时间过得太快啦&#xff01; 最近总是想着2022年的点点滴滴&#xff0c;一年时光不得写点什么不一样的&#xff0c;可是思前想后觉得这一年也没什么不一样的啊。所以呢&#xff0c;2022年终总结标题就取名为平淡无奇。 人一生最重要的是什么&#…

Java Servlet + H2数据库之集成环境配置

在 EclipseMavenTomcat 集成开发环境配置 搭建了一个Servlet的开发环境&#xff0c;整合Tomcat 作为Web容器。如何要加入数据库开发要怎么处理呢&#xff1f; 在实际开发中&#xff0c;一般会选择MySQL&#xff0c;Oracle 等数据库&#xff0c; 但是如果只是学习和演示&#x…

DPDK源码分析之网络基础知识

字节对齐 attribute ((aligned (1))); 在设计不同CPU下的通信协议时&#xff0c;或者编写硬件驱动程序时寄存器的结构这两个地方都需要按一字节对齐。即使看起来本来就自然对齐的也要使其对齐&#xff0c;以免不同的编译器生成的代码不一样. 如果跨越了4字节边界存储&#xff…

java之JVM的位置和体系结构

JVM的概念&#xff1a; JVM 即 Java Virtual Machine&#xff0c;中文名为 Java虚拟机&#xff0c;一般情况下&#xff0c;对于C/C 程序&#xff0c;编译成二进制文件后&#xff0c;就可以直接执行了&#xff0c;但Java 需要使用 javac 编译成 .class 文件&#xff0c;还需要使…

【LSTM回归预测】基于matlab主成分分析结合BiLSTM数据回归预测【含Matlab源码 2276期】

一、LSTM和BiLSTM神经网络结构及原理介绍 长短期记忆网络(Long short-term memory, LSTM)实质上可以理解为一种特殊的RNN,主要是为了解决RNN网络在长序列训练过程中发生梯度消失和梯度爆炸的问题。相比于RNN,LSTM主要是引入了细胞形态(cell state)用于保存长期状态&#xff0c…

世界杯决赛倒计时,你最看好谁

一、期待终极决赛 C站肯定有许多看球的朋友吧。明天即将迎来2022年世界杯终极对决&#xff0c;阿根廷队对战法国。来赶个晚集&#xff0c;也来聊聊世界杯&#xff0c;下一个四年就是2026&#xff0c;会不会还有这种精神呢。先来回顾一下本轮世界杯比赛中的对阵吧。 本轮世界杯中…

Win11+RTX3060+Anconda+CUDA11.3+cuDNN8.2+Pytorch1.10一条龙服务2

Win11RTX3060AncondaCUDA11.3cuDNN8.2Pytorch1.10一条龙服务 &#xff08;1&#xff09;查看安装了哪些包 conda list&#xff08;2)查看当前存在哪些虚拟环境 conda env list &#xff08;3&#xff09;创建虚拟环境&#xff0c;你可以创建好几个虚拟环境&#xff0c;虚拟环…

Flex布局小练--博文列表item布局实现

文章目录前言元素组成实现html部分布局总结前言 今天划一个水先&#xff0c;没办法&#xff0c;作孽没写完&#xff0c;什么这不是作孽的一部分嘛&#xff1f;&#xff01;听不见&#xff0c;听不见。 来先看一下我们要做的一个效果&#xff1a; 首先是这个页面下面的&#xf…

如何基于Jetbrains IDEA DataBase从数据库表中生成对应的Java Bean

在日常的项目开发过程中&#xff0c;大部分人可能都会遇到过想从表自动生成带有注释的Java Bean&#xff0c;在Jetbrains IDEA中通过DataBase工具也是可以生成的。Jetbrains IDEA的Database借助一个名称为Generate POJOs.groovy的groovy模板文件&#xff0c;可以帮我们做代码生…

Python工程师Java之路(t)SpringBoot部署步骤 java -jar

文章目录步骤1、开发环境2、新建工程3、新建controller4、开发环境试运行和测试5、打包运行命令补充步骤 1、开发环境 WIN10IDEA2021Maven3.6.3JDK1.8 2、新建工程 选择Spring和Java版本 添加依赖 3、新建controller package com.example.demo.controller;import org.spr…