解決vue3前端獲取文件的絕對路徑問題

解決vue3前端獲取文件的絕對路徑問題

公司的項目是基于vue3的,由于需求需要前端獲取用戶選的文件的絕對路徑。但是瀏覽器處于安全策略無法獲取真實的文件路徑,只能拿到相對路徑或者是D:\fakepath\xxxx.
看了網上很多方法都很坑,明明沒拿到路徑非說拿到了,浪費了很多時間,這里要說單純依靠vue是解決不了的!!
最后選擇了引入electron來獲取文件的絕對路徑。項目已經使用electron進行了打包,所以是可以通過electron方式運行的,現在需要的就是vue的代碼中引入electron,進行打開文件管理器,實現文件路徑獲取。
首先要安裝相關的包:

npm install --save-dev electron
npm install --save-dev electron-builder

所有的界面代碼都是在vue項目中完成的所以vue中不再需要preload.js background.js這些文件
electron的通信是通過ipcRenderer實現的
在需要通信的文件中進行調用

const { ipcRenderer } = require('electron')

這時候會報錯,錯誤顯示是node_modules/electron/index.js文件中引入fs.existsSync語句造成的
百度查資料得知原因是:
(1)、首先在渲染進程屬于瀏覽器端,沒有集成Node的環境,所以類似 fs 這樣的Node的基礎包是不可以使用。
(2)、因為沒有Node環境,所以這種屬于node api的require關鍵詞是不可以使用的。
(3)、electron5.x的node集成環境默認是關閉的,這之前的版本是默認開啟的
方案是在主進程中集成 Nodejs,也就是添加配置nodeIntegration: true
vue.config.js配置:

 pluginOptions: {electronBuilder: {nodeIntegration: true,contextIsolation: false,}}

然后通過使用window.require代替require來引入electron,因為前者不會被webpack編譯,在渲染進程require關鍵字就是表示node模塊的系統渲染進程:

const { ipcRenderer } = window.require('electron')

這時候又出現 window.require is not a function .錯誤,這是因為工程是在本地瀏覽器運行的,識別不了electron中的api,只要保證在electron應用程序下運行就不會報錯
解決:npm install --save is-electron

 function importStudy() {if (isElectron()) {window.ipcRenderer = window.require('electron').ipcRendereripcRenderer.send('upload', "import study")ipcRenderer.on('get-file-path', (event: any, arg: any) => {console.log(arg)})})}          }

vue文件:

 <button @click="importStudy">import</button>

點擊頁面的按鈕就會向upload發送消息去進行打開文件管理的操作
在electron的包中main.js進行接收

ipcMain.on('upload',(event,message)=>{console.log(message)dialog.showOpenDialog({title:'選擇要上傳的文件',//對話框的標題buttonLabel: '確認', //確定按鈕的自定義標簽properties: [ 'openDirectory', 'multiSelections'], //打開文件的屬性,打開文件還是文件夾,隱藏文件,多選文件}).then(res=>{if(!res.canceled){console.log(res.filePaths)event.reply('get-file-path',res.filePaths)//拿到路徑后返回}}).catch(err=>{console.log(err)});})

此時importStudy可以拿到絕對路徑了,但是前端瀏覽器沒辦法調試,后端是可以獲取到的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41091.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41091.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41091.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue基礎-vue監聽當前屏幕大小做不同的操作

文章目錄 前言一、代碼如下&#xff1a;總結 前言 在vue項目開發過程中&#xff0c;有個需求&#xff0c;就是當屏幕大于1024時&#xff0c;我們默認為PC模式。小于1024時&#xff0c;我們默認為H5模式。但是有的界面我們想在PC和H5上面展示不同的數據&#xff0c;請求不同的接…

Intellij IDEA SBT依賴分析插件

可分析模塊和傳遞依賴 安裝完插件后&#xff0c;由于IDEA BUG&#xff0c;會出現兩個分析按鈕&#xff0c;一個是gradle的&#xff0c;一般是后者是新安裝的sbt。 選擇需要分析的模塊 只需要在project/plugins.sbt中添加代碼&#xff0c;啟動官方分析插件addDependencyTreeP…

1281. 整數的各位積和之差

諸神緘默不語-個人CSDN博文目錄 力扣刷題筆記 文章目錄 1. 簡單粗暴的遍歷2. 其實也是遍歷&#xff0c;但是用Python內置函數只用寫一行 1. 簡單粗暴的遍歷 Python版&#xff1a; class Solution:def subtractProductAndSum(self, n: int) -> int:he0ji1while n>1:last…

redis 數據結構(一)

Redis 為什么那么快 redis是一種內存數據庫&#xff0c;所有的操作都是在內存中進行的&#xff0c;還有一種重要原因是&#xff1a;它的數據結構的設計對數據進行增刪查改操作很高效。 redis的數據結構是什么 redis數據結構是對redis鍵值對值的數據類型的底層的實現&#xff0c…

WordToPDF2.java

用Java將Word轉PDF 本例子測試了spire.doc.free-3.9.0.jar的包 <dependency><groupId> e-iceblue </groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version></dependency> package word;import com.spire.…

Java 動態代理

文章目錄 靜態代理Jdk動態代理cglib動態代理使用案例低配Mybatis低配Feign攔截器 附錄代碼 大家好&#xff0c;我是入錯行的bug貓。&#xff08;http://blog.csdn.net/qq_41399429&#xff0c;謝絕轉載&#xff09; 每天進步一點&#xff0c;今日再接再勵~ 動態代理在Java中有著…

“深入探索JVM內部機制:解密Java虛擬機“

標題&#xff1a;深入探索JVM內部機制&#xff1a;解密Java虛擬機 摘要&#xff1a;本篇博客將深入剖析Java虛擬機&#xff08;JVM&#xff09;的內部機制&#xff0c;包括類加載、內存管理、垃圾回收、即時編譯等關鍵組成部分。通過對JVM內部機制的解密&#xff0c;我們可以更…

團團代碼生成器V1.0:一鍵生成完整的CRUD功能(提供Gitee源碼)

前言&#xff1a;在日常開發的中&#xff0c;經常會需要重復寫一些基礎的增刪改查接口&#xff0c;雖說不難&#xff0c;但是會耗費我們一些時間&#xff0c;所以我自己開發了一套純SpringBoot實現的代碼生成器&#xff0c;可以為我們生成單條數據的增刪改查&#xff0c;還可以…

中遠麒麟堡壘機 SQL注入漏洞復現

0x01 產品簡介 中遠麒麟依托自身強大的研發能力,豐富的行業經驗&#xff0c;自主研發了新一代軟硬件一體化統一安全運維平臺一-iAudit 統一安全運維平臺。該產品支持對企業運維人員在運維過程中進行統一身份認證、統一授權、統一審計、統一監控&#xff0c;消除了傳統運維過程中…

實現Python腳本錄制功能

要實現Python腳本錄制功能&#xff0c;可以使用Python的內置模塊pyautogui和opencv。 首先&#xff0c;需要安裝這兩個模塊&#xff1a; pip install pyautogui opencv-python 然后&#xff0c;可以編寫以下代碼來實現腳本錄制功能&#xff1a; import cv2 import numpy as …

CentOS7.6安裝配置MySQL 5.7及常用命令匯總

一、MySQL安裝&#xff08;rpm安裝&#xff09; 1、檢查沒有安裝過mysql或mariadb rpm -qa | grep -i mysql rpm -qa | grep -i mariadb 返回空值的話&#xff0c;就說明沒有安裝 MySQL。注意&#xff1a;在新版本的CentOS7中&#xff0c;默認的數據庫已更新為了Mariadb&#…

你需要需求管理解決方案的三個原因

我們最近研究了一份 Forrester Research 的報告&#xff0c;得出如下結論&#xff1a;高度監管的行業可以從敏捷需求管理方法中受益。在本文中&#xff0c;我們將深入探討所有行業的客戶如何從一個協作平臺中受益&#xff0c;該平臺如何幫助他們在復雜的開發周期中管理需求。 …

【支付寶小程序】支付寶小程序自定義組件技術教程

&#x1f996;我是Sam9029&#xff0c;一個前端 Sam9029的CSDN博客主頁:Sam9029的博客_CSDN博客-JS學習,CSS學習,Vue-2領域博主 **&#x1f431;?&#x1f409;&#x1f431;?&#x1f409;恭喜你&#xff0c;若此文你認為寫的不錯&#xff0c;不要吝嗇你的贊揚&#xff0c…

接口設置了responseType:‘blob‘后,接收不到后端錯誤信息

下載文件流&#xff0c;需要接口設置responseType:blob&#xff0c;接口設置了responseType:blob后&#xff0c;拿不到后端接口的異常信息&#xff0c;我們只需要添加如下代碼&#xff1a; const service axios.create({baseURL: ***, // url base url request url// withC…

影視公司技術流程設計之服務器搭建

在影視公司&#xff0c;硬件的投入占相當大的比例&#xff0c; 大到存儲&#xff0c; 服務器&#xff0c;工作站&#xff0c; 小到主機CPU&#xff0c;內存&#xff0c;顯卡&#xff0c;手繪板。 而存儲又是硬件上的大頭&#xff0c;一套合理的存儲解決方案&#xff0c;優為關鍵…

【kubernetes】持久卷PV、PVC

目錄 PV和PVC之間的相互作用遵循這個生命周期 根據這 5 個階段&#xff0c;PV 的狀態有以下 4 種 一個PV從創建到銷毀的具體流程如下 靜態PV創建 1、配置nfs存儲 2、定義PV 3、定義PVC 4、測試訪問 動態PV創建 1、在stor01節點上安裝nfs&#xff0c;并配置nfs服務 2…

計算機視覺之三維重建(二)(攝像機標定)

標定示意圖 標定目標 P ′ M P w K [ R T ] P w P^{}MP_wK[R \space T]P_w P′MPw?K[R T]Pw? 其中 K K K為內參數&#xff0c; [ R T ] [R \space T] [R T]為外參數。該式子需要使用至少六對內外點對進行求解內外參數&#xff08;11個未知參數&#xff09;。 其中 R 3 3 …

windows系統丟失mfc120u.dll的解決方法

1.mfc120u.dll是什么 mfc120u.dll是Windows操作系統中的一個動態鏈接庫&#xff08;Dynamic Link Library&#xff0c;簡稱DLL&#xff09;文件。它包含了一些用于運行C程序的函數和其他資源。這個特定的DLL文件是Microsoft Foundation Classes&#xff08;MFC&#xff09;庫的…

freeswitch的mod_xml_curl模塊動態獲取configuration

概述 freeswitch是一款簡單好用的VOIP開源軟交換平臺。 mod_xml_curl模塊支持從web服務獲取xml配置&#xff0c;本文介紹如何動態獲取acl配置。 環境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.6.20 GCC&#xff1a;4.8.5 web…

第2章 性能測量

理解應用程序性能的第一步是學會對它進行測量。 與絕大多數功能問題相比&#xff0c;性能問題通常很難跟蹤和復現。 任何關注過性能評估的人可能都知道公允地進行性能測量并從中得到準確結論是多么困難。 因為在測量中存在誤差&#xff0c;性能分析通常需要統計方法進行處理…