Html открыть окно папки

Как сделать так, чтобы HTML-ссылка открывала папку

Мне нужно разрешить пользователям приложения открывать папку, щелкая ссылку на веб-странице. Путь к папке находится в сети и доступен отовсюду. Я наверное уверен, что нет простого способа сделать это, но может я ошибаюсь?

Я ответил ниже; это обычное требование корпоративных веб-приложений, которое становится практически невозможным из-за неправильной защиты (должна быть возможность разрешить файловые ссылки на доверенных http-страницах). Я только тщательно тестировал Windows.

Вы хотите открыть общую папку в проводнике Windows? Вам нужно использовать file: ссылку, но есть предостережения:

  • 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, и вы фактически можете открыть локальный файл, не загружая его (как при открытии уже существующего пути к файлу). Этого еще нет в хроме.

Вы можете заставить это работать в Chrome с помощью расширения LocalLinks Chrome . Благодаря этому ответу StackOverflow

@ Эндрю Даффи, есть ли какая-либо документация, в которой говорится, что Google Chrome блокирует такое поведение? Я хотел бы узнать об этом побольше

URL-адрес file://[servername]/[sharename] должен открывать окно проводника для общей папки в сети.

убедитесь, что права доступа к вашей папке установлены так, что разрешен список каталогов, а затем просто укажите привязку к этой папке с помощью chmod 701 (хотя это может быть рискованно), например

 href="./downloads/folder_i_want_to_display/" >Go to downloads page 

убедитесь, что у вас нет index.html любого индексного файла в этом каталоге

Этот ответ работает. Часть «разрешенный список каталогов» очень важна. Если это не разрешено, вы можете включить его, но для каждого серверного приложения он разный.

Использование file: ///// просто не работает, если настройки безопасности установлены даже на средний уровень.

Если вы просто хотите, чтобы пользователи могли загружать / просматривать файлы *, расположенные в сети или совместно используемые, вы можете настроить виртуальный каталог в IIS. На вкладке «Свойства» убедитесь, что выбран «Общий ресурс, расположенный на другом компьютере», а «Подключиться как . » — это учетная запись, которая может видеть сетевое расположение.

Ссылка на виртуальный каталог со своей веб-страницы (например, http: // yoursite / yourvirtualdir / ), и это откроет представление каталога в веб-браузере.

Читайте также:  Тег div все css атрибуты

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

Это актуально сегодня, поскольку Chrome и более новые версии IE будут блокировать доступ к локальным ресурсам file: // с нефайловых веб-страниц. Кроме того, его можно настроить для работы в IIS Express, хотя его необходимо добавить и запустить вручную.

Не работает в Chrome, но другие ответы предлагают решение через плагин:

Источник

Как из браузера открыть папку в проводнике 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-ссылка открывала папку

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

Читайте также:  Python ftp get files

Я ответил ниже; это обычное требование корпоративных веб-приложений, которое становится практически невозможным из-за неправильной защиты (должна быть возможность разрешить ссылки на файлы на доверенных 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, хотя его необходимо добавить и запустить вручную. — Шмули

Читайте также:  Php fsockopen close connection

Не работает в 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

Источник

Оцените статью