草庐IT

vue解决Not allowed to load local resource

相与还 2024-03-20 原文

前言

在进行通过本地路径进行加载图片的时候,突然就报了这个问题
Not allowed to load local resource
这个是由于安全性的问题,导致浏览器禁止直接访问本地文件
那么,这边我说一下我具体是怎么解决的吧

问题描述

我的项目是用的vue的vantui框架+springboot
然后我后端给前端的数据是一个路径,具体如下图:

也就是一个本地文件路径的集合

// 为了防止后续图片失效看不到内容,在这标注其中一条数据
D:\\EXAM_MATERIAL\\NEW-STAFF\\IMAGE\\B-0001\\B-0001 公司简介_01.png

而我在页面中的代码是使用的是

// imagebase64是自定义的变量
<img :src="imgBase64" style="position: relative;width:100%;height:100%"/>

我用了一个自定义的变量直接接收路径显示给它
通过按钮上一页和下一页改变自定义变量的值
如:
以下代码只写成最主要的代码,不包括样式,以及不代表我项目中具体代码

<template>
	<div>
	// 图片显示
		<div>
			<img :src="imgBase64" style="position: relative;width:100%;height:100%"/>
		</div>
		// 按钮控制上一页和下一页
		<div>
			<button @click="lastPage">上一页</button>
			<button @click="nextPage">下一页</button>
		</div>
	<div>
</template>
<script>
// 获取后端数据接口
import { getImageList } from "../xxx"
export default {
	name: "xxx",
	// 自定义属性
	    data() {
        return {
            slideImageList: [], // 接收后端数据
            currentPage: 0, // 当前显示第几张图片
            imgBase64: "", // 显示到图片的信息
        }
    },
    // 方法
    methods: {
    // 获取后端数据方法
    getImage() {
    getImageList ().then(res => {
    	// 接收数据(这里根据自己接口来获取)
		this.slideImageList = res.data.data
		// 设置初始显示图片
		this.imgBase64 = this.slideImageList[0];
	})
    },
            // 上一页
        lastPage() {
            if (this.currentPage !=0) {
                this.currentPage--;
                this.imgBase64 = this.slideImageList[this.currentPage];
            }
        },
        // 下一页
        nextPage() {
            this.currentPage++;
            this.imgBase64 = this.slideImageList[this.currentPage];
        },
	},
	 mounted() {
	 // 加载页面获取数据
        this.getImage();
    },
}
</script>


然后就导致了这么一个问题出现

解决步骤

通过上面我们发现,直接将文件路径作为图片显示是不可用的,
于是我对获取后端接口数据作了处理

<script>
// 获取后端数据接口
import { getImageList } from "../xxx"
export default {
	name: "xxx",
	// 自定义属性
	    data() {
        return {
            slideImageList: [], // 接收后端数据
            currentPage: 0, // 当前显示第几张图片
            imgBase64: "", // 显示到图片的信息
        }
    },
    // 方法
    methods: {
    // 获取后端数据方法
    getImage() {
    getImageList ().then(res => {
    	// 接收数据(这里根据自己接口来获取)
		this.slideImageList = res.data.data
		// 定义变量接收处理过的数据
		let urlList = [];
		// 以路径D:\\EXAM_MATERIAL\\NEW-STAFF\\IMAGE\\B-0001\\B-0001 公司简介_01.png为例
		// 遍历数据
		for (let i = 0; i < this.slideImageList.length;i++) {
			// 定义临时变量接收遍历后的每条数据
			let path = this.sildeImageList[i];
			// 定义临时变量截取获取文件名称
			let name = path.substring(path.lastIndexOf("\\") + 1);
			// 定义临时变量接收最终处理后的结果
			let url = path.substring(0, path.lastIndexOf("\\") + 1)
			.replace("D:\\EXAM_MATERIAL", "/EXAM_MATERIAL") + encodeURI(name);
			// 将处理后的结果加入到临时集合
			urlList.push(url);
		}
		// 清空接收的后端数据
		this.slideImageList = [];
		// 接收处理后的结果
		this.slideImageList = urlList;
		// 设置初始显示图片
		this.imgBase64 = this.slideImageList[0];
	})
    },
            // 上一页
        lastPage() {
            if (this.currentPage !=0) {
                this.currentPage--;
                this.imgBase64 = this.slideImageList[this.currentPage];
            }
        },
        // 下一页
        nextPage() {
            this.currentPage++;
            this.imgBase64 = this.slideImageList[this.currentPage];
        },
	},
	 mounted() {
	 // 加载页面获取数据
        this.getImage();
    },
}
</script>

即:

    // 获取后端数据方法
    getImage() {
    getImageList ().then(res => {
    	// 接收数据(这里根据自己接口来获取)
		this.slideImageList = res.data.data
		// 设置初始显示图片
		this.imgBase64 = this.slideImageList[0];
	})
    },

修改为:

    // 获取后端数据方法
    getImage() {
    getImageList ().then(res => {
    	// 接收数据(这里根据自己接口来获取)
		this.slideImageList = res.data.data
		// 定义变量接收处理过的数据
		let urlList = [];
		// 以路径D:\\EXAM_MATERIAL\\NEW-STAFF\\IMAGE\\B-0001\\B-0001 公司简介_01.png为例
		// 遍历数据
		for (let i = 0; i < this.slideImageList.length;i++) {
			// 定义临时变量接收遍历后的每条数据
			let path = this.sildeImageList[i];
			// 定义临时变量截取获取文件名称
			let name = path.substring(path.lastIndexOf("\\") + 1);
			// 定义临时变量接收最终处理后的结果
			let url = path.substring(0, path.lastIndexOf("\\") + 1)
			.replace("D:\\EXAM_MATERIAL", "/EXAM_MATERIAL") + encodeURI(name);
			// 将处理后的结果加入到临时集合
			urlList.push(url);
		}
		// 清空接收的后端数据
		this.slideImageList = [];
		// 接收处理后的数据
		this.slideImageList = urlList;
		// 设置初始显示图片
		this.imgBase64 = this.slideImageList[0];
	})
    },

修改代码后的结果

修改完之后,最终的结果如下:

结语

以上,为vue解决Not allowed to load local resource的过程

有关vue解决Not allowed to load local resource的更多相关文章

  1. 屏幕录制为什么没声音?检查这2项,轻松解决 - 2

    相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系统声音相信很多小伙伴在录制视频后会发现录制的视频没有声音,屏幕录制为什么没声音?如果当时没有打开音频录制,则录制好的视频是没有声音的。因此,建议在录制前进行检查。屏幕上没有声音,很可能是因为你的电脑系统的声音被禁止了。您只需打开电脑系统的声音,即可录制音频和图画同步视频。操作方法:步骤1:点击电脑屏幕右下侧的“小喇叭”图案,在上方的选项中,选择“声音”。 步骤2:在“声

  2. 【高数】用拉格朗日中值定理解决极限问题 - 2

    首先回顾一下拉格朗日定理的内容:函数f(x)是在闭区间[a,b]上连续、开区间(a,b)上可导的函数,那么至少存在一个,使得:通过这个表达式我们可以知道,f(x)是函数的主体,a和b可以看作是主体函数f(x)中所取的两个值。那么可以有,  也就意味着我们可以用来替换 这种替换可以用在求某些多项式差的极限中。方法: 外层函数f(x)是一致的,并且h(x)和g(x)是等价无穷小。此时,利用拉格朗日定理,将原式替换为 ,再进行求解,往往会省去复合函数求极限的很多麻烦。使用要注意:1.要先找到主体函数f(x),即外层函数必须相同。2.f(x)找到后,复合部分是等价无穷小。3.要满足作差的形式。如果是加

  3. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  4. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  5. ruby - 如何更快地解决 project euler #21? - 2

    原始问题Letd(n)bedefinedasthesumofproperdivisorsofn(numberslessthannwhichdivideevenlyinton).Ifd(a)=bandd(b)=a,whereab,thenaandbareanamicablepairandeachofaandbarecalledamicablenumbers.Forexample,theproperdivisorsof220are1,2,4,5,10,11,20,22,44,55and110;therefored(220)=284.Theproperdivisorsof284are1,2,

  6. ruby - 为什么这些方法没有解决? - 2

    这个问题在这里已经有了答案:WhydoRubysettersneed"self."qualificationwithintheclass?(3个答案)关闭29天前。给定这段代码:classSomethingattr_accessor:my_variabledefinitialize@my_variable=0enddeffoomy_variable=my_variable+3endends=Something.news.foo我收到这个错误:test.rb:9:in`foo':undefinedmethod`+'fornil:NilClass(NoMethodError)fromtes

  7. 电脑启动后显示器黑屏怎么办?排查下面4个问题,快速解决 - 2

    电脑启动出现显示器黑屏是一个相当常见的问题。如果您遇到了这个问题,不要惊慌,因为它有很多可能的原因,可以采取一些简单的措施来解决它。在本文中,小编将介绍下面4种常见的电脑启动后显示器黑屏的原因,排查这些原因,快速解决! 演示机型:联想Ideapad700-15ISK-ISE系统版本:Windows10一、显示器问题如果出现电脑启动后显示器黑屏的情况。那么首先您需要检查一下显示器是否正常工作。您可以通过更换另一个显示器或将当前显示器连接到另一台计算机来检查显示器是否存在问题。如果问题仍然存在,那么您可以排除显示器故障的可能性。 二、显卡问题如果您的电脑配备了独立显卡,那么显卡故障也可能是导致电脑

  8. (附源码)vue3.0+.NET6实现聊天室(实时聊天SignalR) - 2

    参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍  介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。  内容有:    ①:Hub模型的方法介绍    ②:服务器端代码介绍    ③:前端vue3安装并调用后端方法    ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke()  去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on

  9. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  10. 【RuntimeError: CUDA error: device-side assert triggered】问题与解决 - 2

    RuntimeError:CUDAerror:device-sideasserttriggered问题描述解决思路发现问题:总结问题描述当我在调试模型的时候,出现了如下的问题/opt/conda/conda-bld/pytorch_1656352465323/work/aten/src/ATen/native/cuda/IndexKernel.cu:91:operator():block:[5,0,0],thread:[63,0,0]Assertion`index>=-sizes[i]&&index通过提示信息可以知道是个数组越界的问题。但是如图一中第二行话所说这个问题可能并不出在提示的代码段

随机推荐