el-upload 上传图片及回显照片和预览图片,文件流和http线上链接格式操作

news2024/9/21 14:40:40

在这里插入图片描述
在这里插入图片描述

   <div  v-for="(info, index) in zsjzqwhxqList.helicopterTourInfoList"  :key="info.id" >
   编辑上传图片
 			 // oss返回线上地址http链接格式:
    						<el-form-item
                                    label="巡视结果照片"
                                    :label-width="formLabelWidth"
                                >
                                    <el-upload
                                        :action="
                                            'http://×××××uploadFile'
                                        "
                                        list-type="picture-card"
                                        :limit="10"
                                        :on-exceed="limitError"
                                        :on-success="
                                            (response, file, fileList) =>
                                                imgSuccess(
                                                    response,file, fileList,index ) "
                                        :on-error="imgError"
                                        :on-remove="
                                            (file, fileList) =>
                                               handleRemove(file,fileList, index) "
                                        :file-list="getFileList(info.url)"
                                        :on-preview="handlePreview"
                                        class="horizontal-upload"  >
                                    </el-upload>
                                </el-form-item>
   				//文件流格式:
   							<el-col :span="24">
                                <el-form-item
                                    label="巡视结果照片"
                                    :label-width="formLabelWidth"
                                >
                                    <el-upload
                                        :action="'×××接口地址/uploadFile' "
                                        list-type="picture-card"
                                        :limit="10"
                                        :on-exceed="limitError"
                                        :on-success="
                                        (response, file, fileList) =>imgSuccess(response,file,fileList,index) "
                                        :on-error="imgError"
                                        :on-remove="
                                            (file, fileList) =>
                                                handleRemove(
                                                    file,
                                                    fileList,
                                                    index ) "
                                        :on-preview="handlePreview"
                                        :file-list="getFileList(index)"
                                        class="horizontal-upload" >
                                    </el-upload>
                                </el-form-item>
                            </el-col>

然后就是方法了有2种

     //http在线返回:返回的是http形式直接浏览器可以打开
        // async xiaziaT() {
        //     for (const tourInfo of this.zsjzqwhxqListck
        //         .helicopterTourInfoList) {
        //         if (tourInfo.url) {
        //             const urls = tourInfo.url.split(",");
        //             for (const url of urls) {
        //                 try {
        //                     const data = await getFileUrl({ url });
        //                     console.log(data);
        //                     // 更新 tourInfo.imageUrl 以回显图片
        //                     tourInfo.imageUrl = data.data.msg;
        //                 } catch (error) {
        //                     console.error(`无法下载文件 ${url}`, error);
        //                 }
        //             }
        //         }
        //     }
        // },
          //文件流:后端接口返回文件流格式
        async xiaziaTwh() {
            this.teamPhotoUrls = [];
            const tempTeamPhotoUrls = [];
            for (const [
                tourIndex,
                tourInfo,
            ] of this.zsjzqwhxqList.helicopterTourInfoList.entries()) {
                if (tourInfo.url) {
                    console.log(tourInfo.url, "tourInfo.url");
                    const urls = tourInfo.url.split(",");
                    tempTeamPhotoUrls[tourIndex] = [];

                    for (const url of urls) {
                        try {
                            const data = await downloadFile({ url });
                            let blob = new Blob([data], {
                                type: "image/jpg",
                            });
                            console.log(data);
                            const imageUrl = data.data.msg;
                            tempTeamPhotoUrls[tourIndex].push({
                                name: url.split(",").pop(),
                                url: imageUrl,
                            });
                            console.log(this.fileList, "234");
                        } catch (error) {
                            console.error(`无法从下载文件 ${url}`, error);
                        }
                    }
                }
            }
            this.teamPhotoUrls = tempTeamPhotoUrls;
        },

公共方法:

 data() {
        return {
            fileList: [],
            fileListCache: {},
            zsjzqwhxqList: [],
            zsjzqwhxqListck: [],
           },
http在线方法:
  // getUrls(urlString) {
        //     if (typeof urlString !== "string" || !urlString) {
        //         return [];
        //     }
        //     return urlString.split(",");
        // },

        // getFileList(urlString) {
        //     if (this.fileListCache[urlString]) {
        //         return this.fileListCache[urlString];
        //     }
        //     const urls = this.getUrls(urlString);
        //     const fileList = urls.map((url, index) => ({
        //         name: `图片 ${index + 1}`,
        //         url: url,
        //     }));
        //     this.fileListCache[urlString] = fileList;
        //     return fileList;
        // },
//防止上传和回显图片了重复加载,因为是根据url:'里面有几个url,隔开会请求几遍文件流地址避免重复渲染'
 computed: {
        computedFileList() {
            return this.teamPhotoUrls.map((photos, index) => {
                return photos.map((photo) => ({
                    name: photo.name,
                    url: photo.url,
                    status: "done", // 设置文件状态为已完成
                }));
            });
        },
//上传功能
limitError(files, fileList) {
            this.$message.error("最多只能上传10张图片");
        },
        imgSuccess(response, file, fileList, index) {
            console.log(file, fileList);
            // 获取当前的 URL 列表
            let currentUrls =
                this.zsjzqwhxqList.helicopterTourInfoList[index].url || "";
            // 将新上传的文件 URL 添加到当前的 URL 列表中
            const newUrl = file.response.msg;
            if (currentUrls) {
                currentUrls += "," + newUrl;
            } else {
                currentUrls = newUrl;
            }
            // 更新 URL 列表和文件列表
            this.zsjzqwhxqList.helicopterTourInfoList[index].url = currentUrls;
            this.zsjzqwhxqList.helicopterTourInfoList[
                index
            ].fileList = fileList;

            this.$message.success("文件上传成功");
            // this.$nextTick(() => {
            // this.xiaziaTwh();
            // });
        },
        imgError(err, file, fileList) {
            this.$message.error("文件上传失败");
        },
        limitError(files, fileList) {
            this.$message.error("上传文件数量超出限制");
        },
        // 删除图片
        handleRemove(file, fileList, index) {
            console.log("Removing file:", file);
            console.log("Removing fileList:", fileList);
            console.log("Removing index:", index);
            const url =
                "××接口地址:10007/zxjcgjgl/helicopterTourManagement/deleteImage";
            let imageUrl;
            if (file.raw) {
                imageUrl = file.response.msg;
                console.log("6666");
            } else {
                imageUrl = file.name;
                console.log("7777");
            } fetch(url, {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({ url: imageUrl }),
            })
                .then((response) => response.json())
                .then((data) => {
                    console.log("响应数据:", data);
                    let currentUrls = this.zsjzqwhxqList.helicopterTourInfoList[
                        index
                    ].url;
                    console.log("删除前的当前URL:", currentUrls);
                    if (data.code === 200) {
                        if (currentUrls) {
                            let urlArray = currentUrls.split(",");
                            let newUrlArray = urlArray.filter(
                                (url) => url !== imageUrl);
                            this.zsjzqwhxqList.helicopterTourInfoList[index ].url = newUrlArray.join(",");
                        }
                        this.zsjzqwhxqList.helicopterTourInfoList[
                            index
                        ].fileList = fileList;
                        this.$message.success("图片删除成功");
                    } else {
                        console.error("错误:", data);
                        this.$message.error("图片删除失败");
                    }
                })
                .catch((error) => {
                    console.error("错误", error);
                    this.$message.error("图片删除失败");
                });
        },
//预览图片:
        handlePreview(file) {
            this.$alert(
                `<img src="${file.url}" style="width: 100%;">`,
                "图片预览",
                {
                    dangerouslyUseHTMLString: true,
                    confirmButtonText: "关闭",
                }
            );
        },

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

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

相关文章

【MySQL】 -- 用户管理

1. 权限 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。创建出非root用户&#xff0c;限制其权限。 权限这个概念拿出来就是用来限制非root用户的。这样从技术手段上保证了数据的安全性和完整性&#xff0c;防止有人删库…

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接&#xff1a; https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动&#xff0c;然后用其他柱子与其围住面积&#xff0c;取最大值。 代码如下&#xff1a; public int maxArea1(int[]…

麒麟系统安装Redis

一、背景 如前文&#xff08;《麒麟系统安装MySQL》&#xff09;所述。 二、下载Redis源码 官方未提供麒麟系统的Redis软件&#xff0c;须下载源码编译。 下载地址&#xff1a;https://redis.io/downloads 6.2.14版本源码下载地址&#xff1a;https://download.redis.io/re…

ADI-DSP|在指定内存写入数据

一、LDF文件设置内存空间 user_data_test { TYPE(BW RAM) START(0x00380010) END(0x0039bfff) WIDTH(8) }//usr data dxe_user_data_bw BW{INPUT_SECTION_ALIGN(4)INPUT_SECTIONS( $OBJS_LIBS(user_data) )} > user_data_test 二、在C文件中设置数据 /************…

2.x86游戏实战-跨进程读取血量

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 接下来会写C/C代码&#xff0c;C/C代码不是很难&#xff0c;然后为了快速掌握逆向这个技能&#xff0c;我…

List常用操作比for循环更优雅的写法

private String name; //姓名 private Integer age; //年龄 private Integer departId; //所属部门id } List list new ArrayList<>(); 复制代码 简单遍历 使用lamada表达式之前&#xff0c;如果需要遍历list时&#xff0c;一般使用增强for循环&#xff0c;代码如…

uboot基本使用网络命令和从服务器端下载linux内核启动

网络命令ip地址设置: setenv gmac_debug 0; setenv mdio_intf rgmii; setenv bootdelay 1; setenv ethaddr 00:xxxx:81:70; // mac地址 setenv ipaddr xxx; //开发板 IP 地址 setenv netmask 255.255.255.0; setenv gatewayip xxx.1; setenv serverip xxxx; //服…

RP2040 开发,用 Arduino 通过 ADC 获取电压测量数据

这两天测试了一下如何通过 RP2040 的内置 ADC 获取一个待测量的电压数据&#xff0c;RP2040 内置了4路ADC&#xff0c;分辨率是12bit&#xff0c;也就是说&#xff0c;可以获取4096阶的变化量&#xff0c;但第4个 ADC 已经用于测量芯片的内部温度&#xff0c;所以实际能用的仅有…

YOLO模型评价指标

在模型训练完成之后&#xff0c;需要对模型的优劣作出评估&#xff0c;YOLO系列算法的评价指标包括&#xff1a; 1. 准确率&#xff08;Precision&#xff09;&#xff1a;指模型预测为正样本中实际为正样本的比例。 &#x1d447;&#x1d443;、&#x1d439;&#x1d443;、…

计算机方向国际学术会议推荐

*华中师范大学伍伦贡联合研究院与南京大学联合主办 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 大会官网&#xff1a;www.icaiotc.net 时间地点&#xff1a;2024年9月13-15日&#xff0c;中国武汉 收录检索&#xff1a;EI Compendex&a…

从一道算法题开始,爱上Python编程

Python是一门简单易学、高效强大的编程语言&#xff0c;许多人因为它的便捷性和广泛应用而爱上编程。今天&#xff0c;我将通过一道有趣的算法题&#xff0c;带领大家一步步写出Python代码&#xff0c;并最终解决问题。希望通过这篇文章&#xff0c;能激发大家对Python编程的兴…

从万里长城防御体系看软件安全体系建设@安全历史03

长城&#xff0c;是中华民族的一张重要名片&#xff0c;是中华民族坚韧不屈、自强不息的精神象征&#xff0c;被联合国教科文组织列入世界文化遗产名录。那么在古代&#xff0c;长城是如何以其复杂的防御体系&#xff0c;一次次抵御外族入侵&#xff0c;而这些防御体系又能给软…

C++语法20 一维数组及其相关问题详解

这是《C算法宝典》语法入门篇的第20节文章啦~ 如果你之前没有太多C基础&#xff0c;请点击&#x1f449;专栏&#xff1a;C语法入门&#xff0c;如果你C语法基础已经炉火纯青&#xff0c;则可以进阶算法&#x1f449;专栏&#xff1a;算法知识和数据结构&#x1f449;专栏&…

stm32学习笔记---TIM输入捕获(代码部分)输入捕获模式测频率/PWMI模式测频率占空比

目录 第一个代码&#xff1a;输入捕获模式测频率 调整频率 PWM.c PWM.h 输入捕获 IC.c 输入捕获初始化步骤 TIM.h库函数 TIM_ICInit TIM_PWMIConfig TIM_ICStructInit TIM_SelectInputTrigger TIM_SelectOutputTrigger TIM_SelectSlaveMode 单独配置四个通道的分…

React Antd ProTable 如何设置类似于Excel的筛选框

React Antd ProTable 如何设置类似于Excel的筛选框 目标&#xff1a;在web页面的table表格中完成类似于EXCEL的Filter筛选功能。 示例图&#xff1a;点击标题列上方的漏斗状图标&#xff0c;即可对数据进行筛选。 ProTable 前景提要 ProTable API中有说明&#xff0c;是有…

一次关于k8s的node节点NotReady的故障排查

master现象 分析 kubectl get nodes -A 看了下pod的状态&#xff0c;好多CrashLoopBackOff kubectl get nodes -o wide 定位到那个具体node的IP地址&#xff0c;登录对应的IP去查看为什么会这样 node节点 journalctl -xe -f -u kubelet 查看此节点的 kubelet 服务&#xff…

Termius:现代化的SSH客户端,让服务器管理变得优雅简洁

Termius简介 是一款现代化的跨平台终端模拟器和SSH客户端。以下是对Terminus的介绍以及使用它的理由&#xff1a; 跨平台兼容性&#xff1a; Terminus支持Windows、macOS、Linux、IOS和Android&#xff0c;让用户在不同操作系统间保持一致的终端体验。优雅的用户界面&#xf…

何用Vue3和Plotly.js打造交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 利用 Plotly.js 创建交互式动画图表 应用场景 本代码适用于需要创建交互式动画图表的数据可视化项目。例如&#xff0c;可以用来展示时间序列数据或比较不同函数的行为。 基本功能 该代码使用 Plotly.js 库…

vite 创建vue3项目 集成 ESLint、Prettier、Sass等

在网上找了一大堆vue3脚手架的东西&#xff0c;无非就是vite或者vue-cli,在vue2时代&#xff0c;vue-cli用的人挺多的&#xff0c;也很好用&#xff0c;然而vue3大多是和vite搭配搭建的&#xff0c;而且个人感觉vite这个脚手架并没有那么的好用&#xff0c;搭建项目时只能做两个…

水上实用救生工具_救生拉杆_鼎跃安全

每年&#xff0c;由于水上事故而失去生命的人数不胜数&#xff0c;水上安全问题也成为公众关注的焦点。如何在关键时刻实施有效的救援&#xff0c;成为保障生命的重要课题。作为水上救援的重要工具&#xff0c;救生拉杆在紧急情况下发挥了无可替代的作用。 救生拉杆&#xff0c…