Открыть папку html код
Доброго времени суток.
Уважаемые форумчане есть проблема, нуждаюсь в вашей помощи.
ПРОСТО ОЧЕНЬ ТЯЖЕЛО ОПИСАТЬ ЗАДАНИЕ ПРАВИЛЬНО, ПОСТАРАЮСЬ ОПИСАТЬ ПО ПРОСТОМУ.
ПРОШУ ОТНОСИТЬСЯ С ПОНИМАНИЕМ
Есть папка с документами (например DOCUMENTS) расположенная на компьютере (1), необходимо открыть содержимое данной папки (DOCUMENTS) на любом другом компьютере (2,3,8. ) находящемся в одной локальной сети, но не все так просто как кажется.
Это необходимо сделать через ссылку на сайте, написанным на HTML
(Простыми словами: на сайте должна быть ссылка, при нажатии которой должно отображаться содержимое папки (DOCUMENTS) )
Речь идет о открытии в Эксплорере или Конкуероре? Всмысле не «считать каталог и отобразить на странице сайта?»
Речь идет о открытии в Эксплорере или Конкуероре? Всмысле не «считать каталог и отобразить на странице сайта?»
Получается что ДА нужно считать и отобразить на странице сайта но на другом ПК
А вот начиная с этого момента мори ты четко должен определиться чего тебе хочется )
Поскольку одно тело — использовать браузер в качестве просмотрщика каталогов, а другое — получить средствами JS список каталогов. Я этим интересовался. и знаю что тут есть подковырка — смотря что ты предполагаешь потом с ними делать.
Предложение Вадима откроет тебе в браузере каталог, но вдруг ты захочешь что-то такое-эдакое с ним делать, как я когда-то.
Так что определяйся
А вот начиная с этого момента мори ты четко должен определиться чего тебе хочется )
Поскольку одно тело — использовать браузер в качестве просмотрщика каталогов, а другое — получить средствами JS список каталогов. Я этим интересовался. и знаю что тут есть подковырка — смотря что ты предполагаешь потом с ними делать.
Предложение Вадима откроет тебе в браузере каталог, но вдруг ты захочешь что-то такое-эдакое с ним делать, как я когда-то.
Так что определяйся
Я буду использовать браузер в качестве просмотра каталога и просмотра документов в этом каталоге.
Просто есть загвоздка в том: как открыть каталог в в браузере на другом ПК?
Как из браузера открыть папку в проводнике Windows
Представьте, что у вас возникла необходимость прямо с веб-страницы заказа в вашей CRM-системе открывать папку с файлами, которые к этому заказу относятся. Но не просто отображать содержимое папки, а прямо на компьютере открывать проводник с этой папкой.
К сожалению, сделать это «в лоб» не получится. Во-первых, браузеры умеют открывать только веб-страницы, а не программы на компьютере. Во-вторых, политика безопасности браузеров запрещает доступ ко всему, что явно не разрешено, тем более, доступ к файловой системе.
Вы можете резонно предположить, что есть протокол file:// (я позволю себе использовать здесь и далее слово протокол, хотя правильнее, конечно, схема URI), который позволяет браузерам открывать локальные файлы, но с ним также есть две проблемы:
1) он не может отобразить список файлов в папке;
2) такие ссылки нельзя открывать с внешних (не локальных) веб-страниц.
Чтобы решить данную проблему, мы будем использовать свой протокол с собственным обработчиком. Метод будет работать в Windows и потребует некоторых (очень простых) действий на компьютере.
В HTML-коде это будет выглядеть как-то так:
window.open('myproto://C:/My Folder/123');
Сначала необходимо придумать название протокола (у меня будет myproto) и зарегистрировать его в системе. Для этого в любом месте (хоть на рабочем столе) создаём файл с расширением .reg (например, myproto.reg) и следующим содержимым:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\myproto] "URL Protocol"="" @="URL:Myproto Protocol" [HKEY_CLASSES_ROOT\myproto\shell] [HKEY_CLASSES_ROOT\myproto\shell\open] [HKEY_CLASSES_ROOT\myproto\shell\open\command] @="\"C:\\myproto.bat\" \"%1\""
Здесь myproto — название моего только что созданного протокола. Можете изменить на своё (но не используйте стандартные названия протоколов типа http, ftp, mailto и прочие).
Запускаем файл. Винда выдаст несколько вопросов и предупреждений, со всеми соглашаемся. Всё, больше этот файл на этом компьютере не нужен, можно удалять.
Далее в корне диска C: необходимо создать файл myproto.bat со следующим содержимым:
@echo off set "path=%~1" setlocal enabledelayedexpansion set path=%path:myproto://=% set path=%path:"=% set path=%path:/=\% set path=!path:%%20= ! set path=!path:%%5C=\! C:\Windows\explorer.exe "%path%"
Здесь также меняем myproto на название вашего протокола. Это и будет его обработчик.
Всё готово. Теперь вы можете прямо из браузера (абсолютно любого) на данном компьютере открывать папки в проводнике в отдельном окне, просто открыв ссылку вида myproto://C:/My Folder/123.
К сожалению, данные действия придётся проделать на всех компьютерах, где необходима такая функциональность. Но, как правило, подобные вещи используются во внутрикорпоративных приложениях, где число пользователей известно и ограничено.
Как сделать так, чтобы HTML-ссылка открывала папку
Мне нужно разрешить пользователям приложения открывать папку, щелкая ссылку на веб-странице. Путь к папке находится в сети, и к ней можно получить доступ отовсюду. Я, наверное, уверен, что нет простого способа сделать это, но может я ошибаюсь?
Я ответил ниже; это обычное требование корпоративных веб-приложений, которое становится практически невозможным из-за неправильной защиты (должна быть возможность разрешить ссылки на файлы на доверенных http-страницах). Я только тщательно тестировал Windows. — Andrew Duffy
9 ответы
- Internet Explorer будет работать, если ссылка представляет собой преобразованный путь UNC ( file://server/share/folder/ ).
- Firefox будет работать, если ссылка находится в собственной искаженной форме с использованием пяти слэшей ( file://///server/share/folder ) и у пользователя есть отключил ограничение безопасности на file: ссылки на странице, обслуживаемой через HTTP. К счастью, IE также принимает искаженную форму ссылки.
- Opera, Safari и Chrome невозможно убедить открыть file: ссылка на странице, обслуживаемой через HTTP.
в IE, только если путь UNC и веб-сайт, содержащий ссылку, находятся в одном домене, то есть только во внутренней сети. — Стефан Штайгер
Я думаю, что это больше не правильно — новые версии IE, похоже, блокируют это поведение так же, как Chrome / Safari и т. Д. — ЗикЛТК
Я просто пробовал это в IE 11, и вы фактически можете открыть локальный файл, не загружая его (как при открытии уже существующего пути к файлу). Этого все еще нет в хроме. — Хохоходаун
@ Эндрю Даффи, есть ли какая-либо документация, в которой говорится, что Google Chrome блокирует такое поведение? Хотелось бы узнать об этом побольше — каламбур
URL file://[servername]/[sharename] должен открыть окно проводника для общей папки в сети.
убедитесь, что права доступа к вашей папке установлены так, что разрешен список каталогов, а затем просто укажите привязку к этой папке с помощью chmod 701 (хотя это может быть рискованно), например
убедитесь, что у вас нет index.html любого индексного файла в этом каталоге
Этот ответ работает. Часть «разрешенный список каталогов» очень важна. Если это не разрешено, вы можете включить его, но для каждого серверного приложения он разный. — Трэвис
Использование file: ///// просто не работает, если настройки безопасности установлены даже на средний уровень.
Если вы просто хотите, чтобы пользователи могли загружать / просматривать файлы *, расположенные в сети или совместно используемые, вы можете настроить виртуальный каталог в IIS. На вкладке «Свойства» убедитесь, что выбран «Общий ресурс, расположенный на другом компьютере», а «Подключиться как . » — это учетная запись, которая может видеть сетевое расположение.
Ссылка на виртуальный каталог с вашей веб-страницы (например, http://yoursite/yourvirtualdir/), и это откроет представление каталога в веб-браузере.
* Вы можете разрешить права на запись в виртуальный каталог, чтобы пользователи могли добавлять файлы, но не пробовали, и предполагать, что сетевые разрешения переопределят этот параметр.
Это актуально сегодня, поскольку Chrome и более новые версии IE будут блокировать доступ к локальным ресурсам file: // с нефайловых веб-страниц. Кроме того, его можно настроить для работы в IIS Express, хотя его необходимо добавить и запустить вручную. — Шмули
Не работает в Chrome, но другие ответы предлагают решение через плагин:
Вы также можете скопировать адрес ссылки и вставить его в новое окно, чтобы обойти безопасность. Это работает в Chrome и Firefox, но вам, возможно, придется добавить косые черты в Firefox.
Просто так и работает. Спасибо! — Никита
Немного поздно на вечеринку, но я должен был решить это для себя недавно, хотя и немного по-другому, это все равно может помочь кому-то в обстоятельствах, похожих на мои.
Я использую xampp на ноутбуке для запуска чисто локального веб-приложения в Windows. (Очень специфическая среда, которую я знаю). В этом случае я использую ссылку html на файл php и запускаю:
shell_exec('cd C:\path\to\file'); shell_exec('start .');
Откроется окно локального проводника Windows.
Многообещающе, но когда я запускаю это в Firefox, вкладка зависает. (Кажется, что сеанс перемешивается или что-то в этом роде, потому что я могу получить доступ к другим сайтам, но этот сайт кажется зависшим — даже на других вкладках!) — Стивен Р.
Я только что протестировал его в Firefox, у меня он работает, но я не могу указать папку, в которой открывать, он открывается только в корневом каталоге файла php. — Лукас Таулеалеа
Надеюсь, это когда-нибудь поможет кому-то. Я делал небольшой POC и наткнулся на это. Кнопка, onClick отображает содержимое папки. Ниже приведен HTML-код,
ответ дан 09 мар ’20, в 07:03
Chrome выдает ошибку: не разрешено загружать локальный ресурс: — Дэйв Соттимано
@Dave Sottimano Я тестировал это только сейчас. У меня работает в Google Chrome, версия 84.0.4147.135 (официальная сборка) (64-разрядная версия) — Нагараджа Дж. Б.
Я решил установить локальную веб-службу на каждом компьютере, который прослушивает порт. 9999 например, и по запросу открывает каталог локально. Мой пример экспресс-приложения node.js:
import < createServer, Server >from "http"; // server import express from "express"; import cors from "cors"; import bodyParser from "body-parser"; // other import util from 'util'; const exec = util.promisify(require('child_process').exec); export class EdsHelper < debug: boolean = true; port: number = 9999 app: express.Application; server: Server; constructor() < // create app this.app = express(); this.app.use(cors()); this.app.use(bodyParser.json()); this.app.use(bodyParser.urlencoded(< extended: true >)); // create server this.server = createServer(this.app); // setup websockets this.setup_routes(); this.listen(); console.info("server initialized"); > private setup_routes(): void < this.app.post("/open_dir", async (req: any, res: any) => < try < if (this.debug) < console.debug("open_dir"); >// get path // C:\Users\ADunsmoor\Documents const path: string = req.body.path; // execute command const < stdout, stderr >= await exec(`start "" "$"`, < // detached: true, // stdio: "ignore", //windowsHide: true, // causes directory not to open sometimes? >); if (stderr) < throw stderr; >else < // return OK res.status(200).send(<>); > > catch (error) < console.error("open_dir >> error = " + error); res.status(500).send(error); > >); > private listen(): void < this.server.listen(this.port, () =>< console.info("Running server on port " + this.port.toString()); >); > public getApp(): express.Application < return this.app; >>
Важно запускать эту службу как локальный пользователь, а не как администратор, иначе каталог может никогда не открыться.
ответ дан 05 мар ’21, в 19:03