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

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

   <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: "关闭",
                }
            );
        },

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Appium APP测试学习

1、安装client编程库(客户端) (1)如果遇到以下问题可以使用全路径安装 (2)安装后导致selenium升级&#xff0c;导致某些方法失效&#xff1a;如find_element_by_id。解决方法&#xff1a;卸载两个安装包&#xff0c;后面重新安装 2、安装appium Server:&#xff08;服务端&…

【论文阅读】场景生成及编辑3D定位论文阅读

<div id"content_views" class"htmledit_views" style"user-select: auto;"><div class"kdocs-document"> 前置知识 归纳偏置 关于归纳偏置的理解&#xff1a;首先推荐一篇解释归纳偏置非常好的博客&#xff1a;浅谈归纳…

【PostgreSQL】AUTO_EXPLAIN - 慢速查询的日志执行计划

本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 一、介绍 在本文中&#xff0c;我们将了解 PostgreSQL AUTO_EXPLAIN功能的工作原理&#xff0c;以及为什么应该使用它来收集在生产系统…

高考十字路口:24年考生如何权衡专业与学校的抉择?

文章目录 每日一句正能量前言专业解析理工科专业商科专业人文社科专业艺术与设计专业个人经验与思考过程结论 名校效应分析名校声誉与品牌效应资源获取学术氛围就业优势个人发展结论 好专业和好学校的权衡个人职业目标行业需求教育质量资源和机会学术氛围就业优势经济和地理位置…

SVM算法-人脸识别背后技术详解

引言 支持向量机&#xff08;SVM&#xff09;是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务中。本文将详细介绍SVM算法在人脸识别任务中的应用&#xff0c;并通过代码示例来展示其背后的技术精髓。我们将分三大部分来展开&#xff0c;本部分将重点介绍SVM算法…

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统&#xff0c;可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章&#xff0c;以及对文章进行分类&#xff0c;打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术&#xff1a;Vu…

网管工作实践_02_IP/MAC地址管理工具

1、ipconfig命令格式及参数 ipconfig是内置于Windows的TCP/IP应用程序&#xff0c;用于显示本地计算机网络适配器的MAC地址和IP地址等配置信息&#xff0c;这些信息一般用来榆验手动配置的TCP/IP设置是否正确。当在网络中使用 DHCP服务时&#xff0c;IPConfig可以检测计算机中分…

利用定时器1产生全双工软件串口

代码; /*《AVR专题精选》随书例程3.通信接口使用技巧项目&#xff1a;使用AVR定时器1和外中断实现全双工软件串口文件&#xff1a;softuart.c说明&#xff1a;软件串口驱动文件作者&#xff1a;邵子扬时间&#xff1a;2012年12月16日*/ #include "softuart.h"// 内部…

达梦数据守护集群部署

接上篇 达梦8单机规范化部署 https://blog.csdn.net/qq_25045631/article/details/139898690 1. 集群规划 在正式生产环境中&#xff0c;两台机器建议使用统一配置的服务器。使用千兆或千兆以上网络。 两台虚拟机各加一块网卡&#xff0c;仅主机模式&#xff0c;作为心跳网卡…

【日记】原来真的有人不适合谈恋爱(1194 字)

正文 21 日正是周五&#xff0c;夏至。全年当中&#xff0c;白天时长最长的一天。而恰好那天也是银行扣息的日子。所以很忙&#xff0c;我差点没能走掉。 所幸最终还是有惊无险。 到斯的家里&#xff0c;是晚上 9 点钟。比我想得要早。这个周周四&#xff0c;他过生日。但是那天…

提升效率新选择——运营必备API合集

在数字化、自动化的时代背景下&#xff0c;运营小工具API已经成为了众多企业不可或缺的重要组成部分。这些API工具为运营工作提供了极大的便利&#xff0c;不仅简化了工作流程&#xff0c;还提高了工作效率。 运营小工具API是针对运营工作特定需求而设计的接口&#xff0c;通过…

7.系统工具——黑马程序员Java最新AI+若依框架项目

目录 前言一、表单构建任务&#xff1a;设计添加课程表单 二、 代码生成1.任务&#xff1a;将部门表在页面端显示改为树形结构 三、系统接口任务&#xff1a;使用sagger进行接口测试 前言 提示&#xff1a;本篇讲解若依框架 系统工具 一、表单构建 功能&#xff1a;完成前端…

【持续集成_01课_Git版本管理及基本应用】

一、什么是持续集成 测试代码、开发代码、测试报告、发送邮件...组合到一起来 --- 流水线。 &#xff08;有一个规范的流程&#xff09; 持续集成&#xff08;Continuous Integration&#xff0c;简称CI&#xff09; 是一种软件开发实践&#xff0c;旨在将代码集成到共享仓库…

网页抓取和网页爬取之间有何区别?

随着互联网的发展和信息的爆炸式增长&#xff0c;数据收集和处理已成为企业和个人不可或缺的需求。在此背景下&#xff0c;网页抓取和网络爬虫已成为两种常见的数据收集方法。虽然这两种方法看似相似&#xff0c;但它们的方法和目标存在显著差异。本文将为您详细介绍网页抓取和…

【科技前沿】电子设计新贵SmartEDA:为何它引领行业风潮?

在当今这个电子科技日新月异的时代&#xff0c;电子设计工具如同设计师的魔法棒&#xff0c;不断推动着产品创新的速度。而近期&#xff0c;一款名为SmartEDA的电子国产设计仿真软件异军突起&#xff0c;成为了行业内的新宠。那么&#xff0c;SmartEDA究竟有何过人之处&#xf…

人工和AI大语言模型成本对比 ai语音模型

这里既有AI&#xff0c;又有生活大道理&#xff0c;无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统&#xff0c;来识别连续0123456789的英文语音。 但若不是仅针对数字&#xff0c;而是所有普通词汇&#xff0c;可能达到十几万个词&#xff0c;解码过程将非常复杂…

# bash: chkconfig: command not found 解决方法

bash: chkconfig: command not found 解决方法 一、chkconfig 错误描述&#xff1a; 这个错误表明在 Bash 环境下&#xff0c;尝试执行 chkconfig 命令&#xff0c;但是系统找不到这个命令。chkconfig 命令是一个用于管理 Linux 系统中服务的启动和停止的工具&#xff0c;通常…

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善

ChatGPT对那些带有残疾迹象的简历有偏见——但它可以改善 去年&#xff0c;华盛顿大学(University of Washington)研究生凯特•格拉兹科(Kate Glazko)在寻找研究实习机会时注意到&#xff0c;招聘人员在网上发布消息称&#xff0c;他们使用OpenAI的ChatGPT和其他人工智能工具来…

【b站-湖科大教书匠】3 数据链路层-计算机网络微课堂

课程地址&#xff1a;【计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09;】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 3 数据链路层 3.1 数据链路层概述 3.1.1 数据链路层在网络体系结…