欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3前端獲取文件的絕對(duì)路徑問(wèn)題解決

 更新時(shí)間:2023年09月08日 09:20:37   作者:敲代碼的柯基  
這篇文章主要給大家介紹了關(guān)于vue3前端獲取文件的絕對(duì)路徑問(wèn)題解決的相關(guān)資料,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

公司的項(xiàng)目是基于vue3的,由于需求需要前端獲取用戶(hù)選的文件的絕對(duì)路徑。但是瀏覽器處于安全策略無(wú)法獲取真實(shí)的文件路徑,只能拿到相對(duì)路徑或者是D:\fakepath\xxxx.

看了網(wǎng)上很多方法都很坑,明明沒(méi)拿到路徑非說(shuō)拿到了,浪費(fèi)了很多時(shí)間,這里要說(shuō)單純依靠vue是解決不了的??!

最后選擇了引入electron來(lái)獲取文件的絕對(duì)路徑。項(xiàng)目已經(jīng)使用electron進(jìn)行了打包,所以是可以通過(guò)electron方式運(yùn)行的,現(xiàn)在需要的就是vue的代碼中引入electron,進(jìn)行打開(kāi)文件管理器,實(shí)現(xiàn)文件路徑獲取。

首先要安裝相關(guān)的包:

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

所有的界面代碼都是在vue項(xiàng)目中完成的所以vue中不再需要preload.js background.js這些文件

electron的通信是通過(guò)ipcRenderer實(shí)現(xiàn)的

在需要通信的文件中進(jìn)行調(diào)用

const { ipcRenderer } = require('electron')

這時(shí)候會(huì)報(bào)錯(cuò),錯(cuò)誤顯示是node_modules/electron/index.js文件中引入fs.existsSync語(yǔ)句造成的

百度查資料得知原因是:

(1)、首先在渲染進(jìn)程屬于瀏覽器端,沒(méi)有集成Node的環(huán)境,所以類(lèi)似 fs 這樣的Node的基礎(chǔ)包是不可以使用。

(2)、因?yàn)闆](méi)有Node環(huán)境,所以這種屬于node api的require關(guān)鍵詞是不可以使用的。

(3)、electron5.x的node集成環(huán)境默認(rèn)是關(guān)閉的,這之前的版本是默認(rèn)開(kāi)啟的

方案是在主進(jìn)程中集成 Nodejs,也就是添加配置nodeIntegration: true

vue.config.js配置:

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

然后通過(guò)使用window.require代替require來(lái)引入electron,因?yàn)榍罢卟粫?huì)被webpack編譯,在渲染進(jìn)程require關(guān)鍵字就是表示node模塊的系統(tǒng)渲染進(jìn)程:

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

這時(shí)候又出現(xiàn) window.require is not a function .錯(cuò)誤,這是因?yàn)楣こ淌窃诒镜貫g覽器運(yùn)行的,識(shí)別不了electron中的api,只要保證在electron應(yīng)用程序下運(yùn)行就不會(huì)報(bào)錯(cuò)

解決:npm install --save is-electron

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

vue文件:

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

點(diǎn)擊頁(yè)面的按鈕就會(huì)向upload發(fā)送消息去進(jìn)行打開(kāi)文件管理的操作

在electron的包中main.js進(jìn)行接收

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

此時(shí)importStudy可以拿到絕對(duì)路徑了,但是前端瀏覽器沒(méi)辦法調(diào)試,后端是可以獲取到的。

總結(jié)

到此這篇關(guān)于vue3前端獲取文件的絕對(duì)路徑問(wèn)題解決的文章就介紹到這了,更多相關(guān)vue3獲取文件絕對(duì)路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何使用vite搭建vue3項(xiàng)目詳解

    如何使用vite搭建vue3項(xiàng)目詳解

    Vite 是一個(gè)面向現(xiàn)代瀏覽器的更輕,更快的web應(yīng)用開(kāi)發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于如何使用vite搭建vue3項(xiàng)目的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能(刷新保持狀態(tài))

    Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能(刷新保持狀態(tài))

    倒計(jì)時(shí)的運(yùn)用場(chǎng)景是需要經(jīng)常用到的,但是根據(jù)業(yè)務(wù)的不同,好比手機(jī)驗(yàn)證碼或者是郵箱驗(yàn)證碼之類(lèi)的,即使用戶(hù)跳轉(zhuǎn)到其它頁(yè)面或者刷新,再次回到登錄也,驗(yàn)證碼的倒計(jì)時(shí)也得保持狀態(tài),下面通過(guò)本文給大家分享Vue3?驗(yàn)證碼倒計(jì)時(shí)功能實(shí)現(xiàn),感興趣的朋友一起看看吧
    2022-08-08
  • Vue3的provide和inject實(shí)現(xiàn)多級(jí)傳遞的原理解析

    Vue3的provide和inject實(shí)現(xiàn)多級(jí)傳遞的原理解析

    Vue3中的provide和inject函數(shù)通過(guò)原型鏈實(shí)現(xiàn)數(shù)據(jù)的多級(jí)傳遞,父組件使用provide注入數(shù)據(jù),子組件和后代組件通過(guò)inject獲取這些數(shù)據(jù),在創(chuàng)建組件實(shí)例時(shí),子組件會(huì)繼承父組件的provides屬性對(duì)象,介紹Vue3的provide和inject實(shí)現(xiàn)多級(jí)傳遞的原理,需要的朋友可以參考下
    2024-12-12
  • Vue中子組件不能修改父組件傳來(lái)的Prop值的原因分析

    Vue中子組件不能修改父組件傳來(lái)的Prop值的原因分析

    在Vue中,父子組件之間通過(guò)Prop和Event實(shí)現(xiàn)了數(shù)據(jù)的雙向綁定,但是,Vue設(shè)計(jì)者為什么不允許子組件修改父組件傳遞的Prop呢,本文就來(lái)帶大家探究為什么子組件不能修改Prop,需要的朋友可以參考下
    2023-06-06
  • 一篇文章搞懂Vue3中如何使用ref獲取元素節(jié)點(diǎn)

    一篇文章搞懂Vue3中如何使用ref獲取元素節(jié)點(diǎn)

    過(guò)去在Vue2中,我們采用ref來(lái)獲取標(biāo)簽的信息,用以替代傳統(tǒng) js 中的 DOM 行為,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)一篇文章搞懂Vue3中如何使用ref獲取元素節(jié)點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue.js iview打包上線(xiàn)后字體圖標(biāo)不顯示解決辦法

    vue.js iview打包上線(xiàn)后字體圖標(biāo)不顯示解決辦法

    這篇文章主要介紹了vue.js iview打包上線(xiàn)后字體圖標(biāo)不顯示解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題及解決方法

    使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題及解決方法

    這篇文章主要介紹了使用Vue-scroller頁(yè)面input框不能觸發(fā)滑動(dòng)的問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • vue父子組件的嵌套的示例代碼

    vue父子組件的嵌套的示例代碼

    本篇文章主要介紹了vue父子組件的嵌套的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • Vue3使用icon的兩種方式實(shí)例

    Vue3使用icon的兩種方式實(shí)例

    vue開(kāi)發(fā)網(wǎng)站的時(shí)候,往往圖標(biāo)是起著很重要的作用,下面這篇文章主要給大家介紹了關(guān)于Vue3使用icon的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • Vue3.0寫(xiě)自定義指令的簡(jiǎn)單步驟記錄

    Vue3.0寫(xiě)自定義指令的簡(jiǎn)單步驟記錄

    Vue中除了內(nèi)置指令,也允許注冊(cè)自定義的指令,下面這篇文章主要給大家介紹了關(guān)于Vue3.0寫(xiě)自定義指令的相關(guān)資料,需要的朋友可以參考下
    2021-06-06

最新評(píng)論