我正在寻找一种从映射的网络驱动器获取“真正的”UNC路径的方法 - 这是一个常见的问题,但不使用我想要的语言或方法。
我希望用户能够使用HTML表单选择文件,但不上传它(文件很大)。我想要获取的是该文件的完整UNC路径。麻烦的是,用户通常会从他们的映射网络驱动器中选择文件(例如g:\ file.txt),这对我来说毫无用处 - 我必须拥有完整的\\server\user\file.txt
路径。
我知道在Windows中你可以在命令行使用net use
来获取有关映射驱动器的信息,你也可以从HKEY_CURRENT_USER\Network\driveletter
获取信息,但我需要一种方法来从一个HTML表单。
我最初的想法是某种形式的Javascript,但我怀疑是否可以通过这种方式访问注册表项。
答案 0 :(得分:4)
您可以使用非常简洁的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>