контролировать рабочий каталог для <input type = "file">? - PullRequest
21 голосов
/ 04 мая 2009

Полная история: Я работаю над проектом для моей компании, который требует, чтобы пользователи в каждом из наших мест загружали отчеты, созданные сторонним программным обеспечением. Все отчеты, генерируемые этим программным обеспечением, всегда помещаются в один и тот же каталог. Некоторые из наших менее компьютерно-грамотных сотрудников, судя по прошлому (и текущему) опыту работы с такой же трудной задачей: загрузкой / сохранением счетов-фактур в определенный каталог с веб-сайта поставщиков, будут испытывать проблемы при поиске правильного каталога для загрузки.

Компьютеры в каждом месте работают под управлением Windows Server 2003 и в настоящее время имеют IE6

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

Изначально я надеялся, что смогу установить файлы непосредственно во входных значениях, но по понятным причинам это отключено в большинстве браузеров. Можно ли с помощью javascript или просто в самом HTML управлять каталогом, который открывается, когда пользователь нажимает кнопку обзора?

Если нет, то какие еще предложения о том, как этого добиться? Даже такой простой способ, как способ успешно установить ярлык на рабочем столе, который заставит браузер использовать необходимый рабочий каталог. (IE, по-видимому, игнорирует параметр 'start in' ярлыков)

Ответы [ 6 ]

14 голосов
/ 04 мая 2009

Вы не можете контролировать содержимое файла, используя JavaScript из соображений безопасности. В противном случае вы можете создать скрытую форму с полем ввода файла, задать для нее путь и отправить форму с помощью JavaScript, чтобы загрузить файл на свой сервер без ведома пользователя.

К сожалению, я не знаю, как установить путь по умолчанию для селектора файлов. Если он есть, я уверен, что он будет зависеть от браузера и может быть использован только путем установки какой-либо опции на стороне клиента, а не через HTML или JavaScript.

3 голосов
/ 04 мая 2009

Быстрый поиск в Google привел к созданию JUpload - Java-апплета с открытым исходным кодом, который, кажется, отвечает всем вашим потребностям: http://jupload.sourceforge.net/

Демонстрационный сайт: http://jupload.sourceforge.net/advanced_js_demo.html

Я уверен, что есть много других таких Java-апплетов, и, вероятно, будет не так уж и сложно развернуть свой собственный.

Единственный другой вариант, о котором я могу подумать, - это приложение для загрузки на ПК.

1 голос
/ 02 августа 2017

Проще говоря, невозможно сделать что-либо подобное. Как видите, все / большинство ответов согласны с этим утверждением, а также те, которые не неправильно поняли вопрос. Извините, но то, что вы пытаетесь сделать, считается большинством браузеров угрозой безопасности.

1 голос
/ 04 мая 2009

IE использует последнюю выбранную папку для загрузки файлов. Если у вас есть контроль над клиентскими компьютерами, мои советы таковы; сопоставьте букву диска с папкой, в которой находятся файлы. Это можно легко сделать с помощью cmd-файла, помещенного в вызывающую автозагрузку subst. Затем попросите пользователей вручную ввести букву диска, так как она очень короткая, поэтому можно написать очень четкую и понятную инструкцию. Удачи.

0 голосов
/ 24 апреля 2015

Это работает. Здесь мне нужно было убедиться, что пользователь использовал входной файл изображения на локальном пути изображения клиента. UrlExists просто проверяет, может ли файл быть загружен по известному пути + имя файла. Мне также нужно, чтобы входные данные выглядели лучше, чем браузеры. Хитрость здесь заключалась в том, чтобы поместить I canvas с большим количеством работы, чем показано здесь, чтобы замаскировать ввод. Установите непрозрачность ввода на 0, здесь установите на 0,5, чтобы вы могли увидеть хитрость.

    <body>
    <canvas id="FancyCanvasButton" tabindex="8" width="240" height="18" style="position: absolute; left: 100px; top: 120px; border: 1px solid rgb(0, 0, 0); z-index: 1;"></canvas>
    <input type="file" accept="image/*" onchange="loadFile(event)" style="opacity:0.5;position: absolute; left: 100px; top: 120px; z-index: 2; " >
    <img id="output"/>
 <script>
 var loadFile = function(event) {
   var output = document.getElementById('output');
   var fName= "Images/" + event.target.files[0].name;  //None path with users selected file name
   if(UrlExists(fName)){
     output.src=fName;         //Do something like show image
   }else{
    alert("File not present"); // Do something to show file not in this path
   }
 };

 function UrlExists(url) {
    var http = new XMLHttpRequest();
    http.open('HEAD', url, false);
    http.send();
    if (http.status != 404){
       return true;
     }else{
       return false;
     }
  }

  </script>
0 голосов
/ 04 мая 2009

Вы не можете установить значение входного файла, это проблема безопасности.

Вы можете использовать элемент управления activex, хотя этот материал устарел. Есть много продвинутых элементов управления ActiveX для загрузки файлов, и я уверен, что вы можете выбрать один из них довольно дешево.

Настройка реестра для каталога загрузки может помочь: (даже при загрузке) и вам придется выяснить, как установить его каждый раз, когда они открывают IE

HKCU\Software\Microsoft\Internet Explorer\DownloadDirectory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...