从映射的网络驱动器获取 UNC 路径

Posted

技术标签:

【中文标题】从映射的网络驱动器获取 UNC 路径【英文标题】:Obtaining UNC path from mapped network drive 【发布时间】:2013-02-12 17:24:18 【问题描述】:

我正在寻找一种从映射网络驱动器获取“真实”UNC 路径的方法——这是一个常见问题,但没有使用我想要的语言或方法。

我希望用户能够使用 html 表单选择文件,但不能上传(文件很大)。我想要获得的是文件的完整 UNC 路径。问题是用户通常会从他们映射的网络驱动器(例如 g:\file.txt)中选择文件,这对我没有用 - 我必须有完整的 \\server\user\file.txt 路径。

我知道在 Windows 中,您可以在命令行中使用 net use 获取有关映射驱动器的信息,您也可以从 HKEY_CURRENT_USER\Network\driveletter 获取信息,但我需要一种从 HTML 表单中获取此信息的方法。

我最初的想法是某种形式的 javascript,但我怀疑注册表项是否可以通过这种方式访问​​。

【问题讨论】:

我怀疑如果不使用本地安装的组件这是可能的。是否可以让用户先安装一些东西? 如果这是在公司网络上,那么也许您可以在获得文件名时接受文件名 (G:\file.txt),然后使用一些服务器端代码连接回用户的电脑 (您应该能够轻松获取他们的 IP 地址)并获取网络驱动器映射列表来确定驱动器号的分配位置? @monkeymatrix:你完全反对一个简单的ActiveX控件吗? 这需要在客户端完成吗?如果您使用的是 .Net,我相信我有一个可能的解决方案。 【参考方案1】:

你可以用一个非常简洁的JavaScript和一个已经安装的ActiveX控件来做到这一点。下面是一个完整的网页,可让您浏览文件,然后在 alert 中显示所选文件的完整 UNC 路径:

<html> 
    <head> 
    <script type="text/javascript" language="JavaScript"> 
    if (typeof String.prototype.startsWith != 'function') 
      // see below for better implementation!
      String.prototype.startsWith = function (str)
        return this.indexOf(str) == 0;
      ;
    

    function getUNCPath() 
        var fileName = document.getElementById("uploadedFile").value;

        var WshNetwork = new ActiveXObject("WScript.Network"); 
        var Drives = WshNetwork.EnumNetworkDrives(); 
        for (i = 0; i < Drives.length; i += 2) 
            if (fileName.startsWith(Drives.Item(i))) 
                var fullPath = fileName.replace(Drives.Item(i), Drives.Item(i + 1));
                alert(fullPath);
                break;
            
        
    
    </script> 
    </head> 
    <body> 
        <form onsubmit="getUNCPath()"> 
            <input type="file" id="uploadedFile"/>
            <input type="submit" value="Get the UNC Path!" /> 
        </form>
        <span id="uncPath"></span>
    </body> 
</html> 

【讨论】:

感谢您的回答,但这似乎不适用于 IE,而且 ActiveX 的主要缺点是它不是跨浏览器 - 我无法知道我的用户可能使用什么浏览器:( 你说它在 IE 中工作?它实际上在 IE 中工作。你用的是什么版本的IE?您是否告诉 IE 允许被阻止的内容并授予它运行 ActiveX 控件的权限?此外,您真的不希望能够通过盒装和安全 JavaScript 环境从机器收集专有客户端信息,对吗? IE8,并且没有警报、弹出窗口或任何其他请求许可的内容。感谢您的回答,但任何解决方案都需要跨浏览器。我不希望能够从 Javascript 中挖掘敏感数据,但可能有一些方法可以在上传表单上获取像“文件真正在哪里”这样简单的内容,因此问题! :)

以上是关于从映射的网络驱动器获取 UNC 路径的主要内容,如果未能解决你的问题,请参考以下文章

映射要由服务使用的网络驱动器

如何查询类似于“net use”的记住的 UNC 连接?

如何在没有 pushd 的情况下获取 UNC 路径上的文件大小?

win8如何设置映射网络驱动器

检查网络驱动器是否已连接为Windows服务[关闭]

将 ProcessStartInfo.WorkingDirectory 设置为 UNC 路径