big*_*igp 6 javascript windows path openfiledialog node.js
为什么要在服务器端显示文件/文件夹对话框?
我正在构建一个打算在本地运行的项目(浏览器中的 Node 服务器端部分和客户端),我希望能够在其中选择路径,将其添加到某个列表或 JSON文件,然后在其中维护一些项目(webpack'ing、读取文件、通过 express 服务等)。
主要只是供个人使用,现在无论如何。
我要求通过 Node 而不是浏览器执行此操作的原因是,我可以以某种方式绕过现代浏览器中的安全隐患,即在选择文件夹时防止在客户端显示完整的本地文件夹路径(从<input>标签)。
不仅如此,我还:
我只需要:
以这个input标签为例:
<input id="open-project" type="file" />
这将导致这种类型的弹出窗口,非常适合深入文件夹、粘贴部分路径以快速导航到您需要的位置、转到您的快速访问/收藏夹等...
但它用于选择 files,没有暴露路径,没有任何有用的传递给服务器。
然而...
如果换成这个...
<input id="open-project" type="file" webkitdirectory directory />
您最终会看到这个可怕的对话框,它假定您要上传文件夹中包含的所有文件。
所以它看起来并不是<input>要走的路。
也许有一个现有的模块可以在服务器端执行此操作?这样我就可以:
或者...
制作一个...浏览器中的树视图...与节点端来回通信以挖掘本地文件系统...
有什么建议?
小智 6
我通过生成一个子 powershell 进程并将该值传递回父进程来实现这一点。这只能在 Windows 服务器上工作,但这样的事情应该工作:
let psScript = `
Function Select-FolderDialog
{
param([string]$Description="Select Folder",[string]$RootFolder="Desktop")
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
Out-Null
$objForm = New-Object System.Windows.Forms.FolderBrowserDialog
$objForm.Rootfolder = $RootFolder
$objForm.Description = $Description
$Show = $objForm.ShowDialog()
If ($Show -eq "OK")
{
Return $objForm.SelectedPath
}
Else
{
Write-Error "Operation cancelled by user."
}
}
$folder = Select-FolderDialog # the variable contains user folder selection
write-host $folder
`
Run Code Online (Sandbox Code Playgroud)
这本质上是您需要提示文件夹位置的脚本,然后将其写入主机(类似于 console.log)
那么你需要执行这个脚本并处理输出:
var spawn = require("child_process").spawn,child;
child = spawn("powershell.exe",psScript);
child.stdout.on("data",function(data){
console.log("Powershell Data: " + data);
});
child.stderr.on("data",function(data){
//this script block will get the output of the PS script
console.log("Powershell Errors: " + data);
});
child.on("exit",function(){
console.log("Powershell Script finished");
});
child.stdin.end(); //end input
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7188 次 |
| 最近记录: |