2016-11-21 81 views
3

如何在節點webkit應用程序中獲取目錄(而不是當前工作目錄)的絕對路徑?獲取節點webkit中目錄的完整路徑

示例(Mac OS) - 我在我的Documents中創建了一個名爲A的文件夾。當我做getDirectory與文件系統的目錄項,我只能得到dir.fullPath返回A

app.workspace.getDirectory(self.folderpath, {}, function(dir){ 
    if(dir) console.log('Dir: ', dir); 
}); 

但我需要:~/Documents/A/ || c:\Users\Username\Documents

在我的應用程序中,用戶可以選擇/創建一個他們想要的目錄,並且從該文件夾存儲/讀取數據。

絕對路徑可能不是我所需要的,但我想用默認的桌面應用程序打開文件(PDF,DOC ...):

function getCommandLine() { 
    switch (process.platform) { 
     case 'darwin' : return 'open'; 
     case 'win32' : return 'start'; 
     case 'win64' : return 'start'; 
     default : return 'xdg-open'; 
    } 
} 

var exec = require('child_process').exec; 
var filepath = '...'; 
//dir.fullPath will throw: The file /A/example.pdf does not exist. 

var child = exec(getCommandLine() + ' ' + filepath, function (error, stdout, stderr) { 
    if (error) { 
     console.error(`exec error: ${error}`); 
      return; 
    } 
}); 
child.on('close', function (e) { 
    console.log('E: ', e); 
}); 

回答

0

其實我最近發現(我不相信我錯過了它,但是),與鉻文件系統,你可以得到「更可讀」的路徑信息用於顯示目的。

取決於你正在嘗試做的,你可能無法訪問的絕對位置,但至少你可以看到它是什麼...

fileSystem.getDirectory(path, {}, function(dir){ 
    if(dir) console.log('This should return full path: ', dir.getDisplayPath()); 
    var fullpath = dir.getDisplayPath(); 

    //now with this, I can open any file I want via child process :) 

    var child = exec(getCommandLine() + ' ' + fullpath, function (error, stdout, stderr) 
    //....... 
}); 

更多信息here關於鉻的文件系統。

1

不知道我理解thequestion。您可以使用__dirname來獲取正在執行的腳本的目錄。請參閱:https://nodejs.org/docs/latest/api/globals.html#globals_dirname

並從那裏您可以使用相對路徑來引用其他文件和文件夾。

實施例的文件夾結構:

/home/filippo/works/test/ 
├── subfolder 
│   └── index.js 
└── test.js 

子目錄/ index.js:

module.exports = {'folder': __dirname}; 

test.js:

var m = require("./subfolder/"); 

console.log("test.js running in: ", __dirname); 
console.log("m module running in: ", m.folder); 

運行測試:

$ node test.js 
test.js running in: /home/filippo/works/test 
m module running in: /home/filippo/works/test/subfolder 

這是你在找什麼?

+0

是的,你還沒有明白它:)腳本的目錄和我想要訪問的文件夾是分開的。兩者可以在任何地方。該腳本顯然是從應用程序包運行的,理想情況下應該位於Applications文件夾中,而其他目錄是自由選擇的。用戶可以選擇他們機器上任何位置的任何文件夾。我真正想要做的是用用戶的默認應用程序打開文檔,我發現一個這樣做與exec執行的方式,但外殼腳本運行從根... –

+0

好的抱歉。而且你不能存儲用戶在某個地方選擇的文件夾。 – filippo

+0

不是完整的網址否 - 它是沙盒。我在我的'〜/ Documents/Myfolder'中創建了我的文件夾..我只能返回'/ Myfolder' –

2

出於安全原因,您無法從網頁訪問系統目錄文件的絕對路徑。即使您嘗試從JavaScript腳本訪問特定文件目錄(例如),瀏覽器也會立即阻止您。

可能適用於您的解決方案是通過簡單的<input type="file">來檢索用戶想要打開的文件,以便用戶可以選擇文件而無需爲您提供絕對路徑;之後您可以保存該文件到服務器主機,甚至項目的本地目錄,然後使用遠程路徑使用exec命令打開它。