2013-02-12 4 views
3

Я ищу способ получения «реального» UNC-пути из подключенного сетевого диска - общий вопрос здесь, но не использование языка или метода, который я желаю.Получение UNC-пути из подключенного сетевого диска

Я бы хотел, чтобы пользователи могли выбирать файл, используя форму HTML, но не загрузите его (файлы огромны). Все, что я хочу получить, это полный путь UNC к файлу. Проблема в том, что пользователи обычно выбирают файлы из своего подключенного сетевого диска (например, g: \ file.txt), который мне бесполезен - у меня должен быть полный путь \\server\user\file.txt.

Я знаю, что в Windows вы можете использовать net use в командной строке для получения информации о подключенных дисках, и вы также можете получить информацию из HKEY_CURRENT_USER\Network\driveletter, но мне нужен способ получить это из HTML-формы.

Моя первоначальная мысль была в некоторой форме Javascript, но я сомневаюсь, что раздел реестра будет доступен таким образом.

+0

Я сомневаюсь, что это возможно без использования локального установленного компонент. Можно ли подумать о том, чтобы пользователи сначала что-то установили? – rene

+1

, если это в корпоративной сети, возможно, вы можете принять имя файла, как вы его получите (G: \ file.txt), а затем использовать некоторый код на стороне сервера для подключения к ПК пользователя (вы должны легко получить их IP-адрес) и получить список сопоставлений сетевого диска для работы с буквой диска? – paulH

+0

@monkeymatrix: вы полностью против простого элемента управления ActiveX? –

ответ

4

Вы можете сделать это очень просто с очень краткой части JavaScript и уже установленным элементом управления ActiveX. Ниже приведен полный веб-страницу, которая позволит вам выбрать файл, а затем показать вам полный UNC путь к выбранному файлу в качестве alert:

<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> 
+0

Спасибо за ответ, однако это не работает на IE, и основной недостаток ActiveX в том, что он не является кросс-браузером - у меня нет способа узнать, какие браузеры могут использовать мои пользователи :( – monkeymatrix

+2

Вы сказали это * * не работает ** в IE? Было бы на самом деле ** работать только в IE. Какую версию IE вы используете? Вы сказали IE разрешить заблокированный контент и дать ему разрешение на запуск элемента управления ActiveX? , вы на самом деле не ожидаете, что сможете собрать конфиденциальную информацию о клиенте с машины с помощью встроенной и защищенной *** среды JavaScript? –

+0

IE8, и не было никаких предупреждений, всплывающих окон или чего-либо еще попросив разрешения. Спасибо за ваш ответ, но любое решение должно быть кросс-браузером. Я не ожидаю, что смогу получить важные данные из Javascript, но может быть какой-то метод для получения чего-то простого: «где файл действительно «на форме загрузки, следовательно, вопрос! :) – monkeymatrix

Смежные вопросы