使用js调用本地文件夹路径

本文介绍了一个JavaScript函数browseFolder(),它可以实现在网页上选择本地文件夹的功能。为了使此功能正常运行,用户需要设置浏览器的信任站点并调整安全级别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<html>
<head>
<title>上传本地文件夹路径</title>
<script type="text/javascript" language="javascript">

/**
* browseFolder.js
* 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框
* 以供用户实现对系统文件夹选择的功能
* 文件夹选择对话框起始目录由
* Shell.BrowseForFolder(WINDOW_HANDLE, Message, OPTIONS, strPath)函数
* 的strPath参数设置
* 例如:0x11--我的电脑
* 0 --桌面
* "c://"--系统C盘
*
* 用如下代码把该函数应用到一个HTML文件中:
* <script src="browseFolder.js"></script>
* 或把下面代码直接COPY到<script language="javascript">...</script>标签中;
*
* 用一般的触发函数均可在HTML文件中使用该函数
* 例如:<input type="button" onclick="BrowseFolder()" />
* 注意:请定义NAME为savePath的输入框接收或显示返回的值,例如:
* <input type="text" name="savePath" />
*
* 特别注意的是,由于安全方面的问题,你还需要如下设置才能使本JS代码正确运行,
* 否者会出现"没有权限"的问题.
*
* 1、设置可信任站点(例如本地的可以为:http://localhost
* 2、其次:可信任站点安全级别自定义设置中:设置下面的选项
* "对没有标记为安全的ActiveX控件进行初始化和脚本运行"----"启用"
*/

function browseFolder(path) {
try {
var Message = "/u8bf7/u9009/u62e9/u6587/u4ef6/u5939"; //选择框提示信息
var Shell = new ActiveXObject("Shell.Application");
alert(Shell);
alert(Message);
var Folder = Shell.BrowseForFolder(0, Message, 64, 0x11);//起始目录为:我的电脑
//var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面
if (Folder != null) {
Folder = Folder.items(); // 返回 FolderItems 对象
Folder = Folder.item(); // 返回 Folderitem 对象
Folder = Folder.Path; // 返回路径
if (Folder.charAt(Folder.length - 1) != "//") {
Folder = Folder + "//";
}
document.getElementById(path).value = Folder;
return Folder;
}
}
catch (e) {
alert(e.message);
}
}

</script>
</head>
<body>
<table><tr>
<td>
<input type="text" name="path" />
</td>
<td>
<input type="button" onclick="browseFolder('path')"
value="选择生成路径" />
</td>
</tr>
<table>
</body>
</html>
-----------------------------------------------------

这是从别人那儿转来的,那个安全级别必须为“启用”,“提示”也不行的。

<html>
<head>
<title>上传本地文件夹路径</title>
<script type="text/javascript" language="javascript">

/**
* browseFolder.js
* 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框
* 以供用户实现对系统文件夹选择的功能
* 文件夹选择对话框起始目录由
* Shell.BrowseForFolder(WINDOW_HANDLE, Message, OPTIONS, strPath)函数
* 的strPath参数设置
* 例如:0x11--我的电脑
* 0 --桌面
* "c://"--系统C盘
*
* 用如下代码把该函数应用到一个HTML文件中:
* <script src="browseFolder.js"></script>
* 或把下面代码直接COPY到<script language="javascript">...</script>标签中;
*
* 用一般的触发函数均可在HTML文件中使用该函数
* 例如:<input type="button" onclick="BrowseFolder()" />
* 注意:请定义NAME为savePath的输入框接收或显示返回的值,例如:
* <input type="text" name="savePath" />
*
* 特别注意的是,由于安全方面的问题,你还需要如下设置才能使本JS代码正确运行,
* 否者会出现"没有权限"的问题.
*
* 1、设置可信任站点(例如本地的可以为:http://localhost
* 2、其次:可信任站点安全级别自定义设置中:设置下面的选项
* "对没有标记为安全的ActiveX控件进行初始化和脚本运行"----"启用"
*/

function browseFolder(path) {
try {
var Message = "/u8bf7/u9009/u62e9/u6587/u4ef6/u5939"; //选择框提示信息
var Shell = new ActiveXObject("Shell.Application");
alert(Shell);
alert(Message);
var Folder = Shell.BrowseForFolder(0, Message, 64, 0x11);//起始目录为:我的电脑
//var Folder = Shell.BrowseForFolder(0,Message,0); //起始目录为:桌面
if (Folder != null) {
Folder = Folder.items(); // 返回 FolderItems 对象
Folder = Folder.item(); // 返回 Folderitem 对象
Folder = Folder.Path; // 返回路径
if (Folder.charAt(Folder.length - 1) != "//") {
Folder = Folder + "//";
}
document.getElementById(path).value = Folder;
return Folder;
}
}
catch (e) {
alert(e.message);
}
}

</script>
</head>
<body>
<table><tr>
<td>
<input type="text" name="path" />
</td>
<td>
<input type="button" onclick="browseFolder('path')"
value="选择生成路径" />
</td>
</tr>
<table>
</body>
</html>

<think>嗯,用户想在UniGUI中实现选择本地文件夹并显示本地路径的功能。首先,我需要回忆一下UniGUI的组件和功能。UniGUI是基于Delphi的框架,主要用于开发Web应用,但有时候用户可能需要访问本地文件系统,这在Web环境中通常有限制。 我记得UniGUI有一个TUniFileUpload组件,但这个是用来上传文件的,可能不支持选择文件夹。不过用户需要的是选择文件夹,而不是单个文件。这时候可能需要调用JavaScript的对话框,因为浏览器本身不支持通过标准HTML输入元素选择文件夹,除非使用特定属性,比如webkitdirectory,但兼容性可能有问题。 另外,UniGUI可能提供了一些扩展方法或者调用JavaScript API的方式。例如,可以使用TUniEdit组件来显示路径,然后通过TUniButton触发文件夹选择。这时候需要用到JavaScript的input元素,设置type为file并添加webkitdirectory属性,这样用户可以选择文件夹。然后通过UniSession的JavaScript回调将路径传回Delphi代码。 接下来,我需要检查如何将JavaScript集成到UniGUI中。可能需要创建一个自定义的JavaScript函数,当用户点击按钮时触发这个函数,弹出文件夹选择对话框。然后,处理选中的路径,通过AJAX回调将路径发送到服务器端,再更新TUniEdit的Text属性。 另外,还要考虑浏览器的兼容性。webkitdirectory主要在基于Chromium的浏览器中有效,比如Chrome和Edge,但Firefox可能不支持。所以需要提醒用户注意兼容性问题,或者提供备选方案。 然后,参考用户提供的引用内容,虽然引用[1]和[2]似乎与图像处理和浏览器驱动相关,但可能可以忽略,因为用户当前的问题是关于文件夹选择的。需要确保回答基于UniGUI的具体实现方法,可能涉及调用客户端JavaScript,处理回调,以及更新界面组件。 最后,生成相关问题,比如如何验证路径是否存在,如何处理多选,或者如何在不同浏览器中保持兼容性,这些都可能帮助用户进一步深入理解。</think>在UniGUI中实现选择本地文件夹并显示路径的功能,可通过以下步骤实现: ### 解决方案 1. **创建基础界面** ```delphi // 在窗体上放置 UniEdit1: TUniEdit; // 用于显示路径 UniButton1: TUniButton; // 触发选择操作 ``` 2. **JavaScript交互实现** ```javascript // 在UniButton1的ClientEvents.ExtEvents添加 function click(sender, e, eOpts) { var input = document.createElement('input'); input.type = 'file'; input.webkitdirectory = true; input.onchange = function(e) { var path = e.target.files[0].path.replace(/\\/g,'/').replace(/\/[^\/]*$/,''); ajaxRequest(sender, '_GETPATH', {path: path}); } input.click(); } ``` 3. **Delphi回调处理** ```delphi procedure TMainForm.UniFormAjaxEvent(Sender: TComponent; EventName: string; Params: TUniStrings); begin if EventName = '_GETPATH' then UniEdit1.Text := Params.Values['path']; end; ``` ### 注意事项 - 该方法依赖Chromium内核浏览器(Chrome/Edge)[^1] - 路径显示格式已自动转换为斜杠`/`分隔 - 需在项目设置中启用`AllowFolderSelection`属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值