Схема URI файла - это схема URI, определенная в RFC 8089, обычно используется для извлечения файлов из собственного компьютера.
Ранее схема URI файла была указана в RFC 1630 и RFC 1738. Инженерная группа Интернета (IETF) опубликовала RFC 8089, обновив последний RFC, с "синтаксисом, основанным на общем синтаксисе RFC 3986, совместимый с большинством существующих видов использования. "
URI файла принимает форму
file: // host / path
где host - это полное доменное имя системы, в которой доступен путь, а path - это иерархический путь к каталогу в форме каталог / каталог /.../ имя. Если host не указан, принимается "localhost ", машина, с которой интерпретируется URL. Обратите внимание, что при опускании хоста косая черта не опускается (пока «file: ///foo.txt» допустимо, «file: //foo.txt» - нет, хотя некоторые интерпретаторы справляются с последним).
RFC 3986 включает дополнительную информацию об обработке ".." и "." сегменты в URI.
localhost
, хотя эта часть может быть полностью опущена или может содержать пустое имя хоста.файл: / путь
, файл: /// путь
или файл: // имя хоста / путь
.файл: // путь
(т.е. две косые черты, без имени хоста) никогда не является правильным, но часто используется.Существует два способа, которыми Windows UNC имена файлов (например, \\ server \ folder \ data.xml
) могут быть представлены. Оба они описаны как «нестандартные». Первый способ (называемый здесь форматом с двумя косыми чертами) состоит в представлении имени сервера с помощью авторитетной части URI, которая затем становится file: //server/folder/data.xml
. Второй способ (называемый здесь форматом с четырьмя косыми чертами) - представить имя сервера как часть компонента Path, поэтому URI становится file: ////server/folder/data.xml
. Обе формы активно используются. Microsoft.NET (например, метод новый Uri (путь)
) обычно использует форму с двумя косыми чертами; Java (например, метод новый URI (путь)
) обычно использует форму с четырьмя косыми чертами. Любая форма позволяет успешно использовать наиболее распространенные операции с URI (разрешение относительных URI и разыменование для получения соединения с удаленным файлом). Однако, поскольку эти URI нестандартны, некоторые менее распространенные операции завершаются ошибкой: примером является операция нормализации (определенная в RFC 3986 и реализованная в Java java.net.URI.normalize ()
метод), который уменьшает file: ////server/folder/data.xml
до непригодной формы file: /server/folder/data.xml
.
Вот два примера Unix, указывающих на один и тот же файл / etc / fstab:
file: // localhost / etc / fstab file: // / etc / fstab
Вот несколько примеров, которые могут быть приняты некоторыми приложениями в системах Windows, со ссылкой на тот же локальный файл c: \ WINDOWS \ clock.avi
file: //localhost/c$/WINDOWS/clock.avi file: /// c: /WINDOWS/clock.avi
Вот URI, понятный API оболочки Windows:
file: /// c: /WINDOWS/clock.avi
Обратите внимание, что буква диска, за которой следует двоеточие и косая черта, является частью допустимого URI файла.
В системах Microsoft Windows обычное двоеточие (:) после буквы устройства иногда заменяется вертикальной чертой (|) в URL-адресах файлов. Это отражало исходный синтаксис URL, который сделал двоеточие зарезервированным символом в части пути.
Начиная с версии Internet Explorer 4, URI файлов стандартизированы в Windows и должны соответствовать следующей схеме. Это относится ко всем приложениям, которые используют URLMON или SHLWAPI для синтаксического анализа, выборки или привязки к URI. Чтобы преобразовать путь в URL-адрес, используйте UrlCreateFromPath
, а для преобразования URL-адреса в путь используйте PathCreateFromUrl
.
Для доступа к файлу «the file.txt» можно использовать следующее.
Для сетевого расположения:
file: //hostname/path/to/the%20file.txt
Или для локального файла имя хоста опущено, но косая черта не является (обратите внимание на третью косую черту):
file: // / c: /path/to/the%20file.txt
Это не то же самое, что и строка "localhost" или точка "." вместо имени хоста. Строка "localhost" будет пытаться получить доступ к файлу как UNC путь \\ localhost \ c: \ path \ to \ the file.txt
, что не будет работать, так как двоеточие не допускается в имени общего ресурса. Точка "." приводит к тому, что строка передается как \\. \ c: \ path \ to \ the file.txt
, что будет работать для локальных файлов, но не для общих файлов в локальной системе. Например, file: //./sharename/path/to/the%20file.txt
не будет работать, потому что это приведет к тому, что общее имя будет интерпретироваться как часть пространства имен DOSDEVICES, а не как общий сетевой ресурс.
Следующая схема в общих чертах описывает требования.
По возможности используйте предоставленные функции. Если вы должны создать URL-адрес программно и не можете получить доступ к SHLWAPI.dll (например, из сценария или другой среды программирования, где эквивалентные функции недоступны), приведенный выше план поможет.
Для поддержки установленной базы унаследованных приложений в Win32 PathCreateFromUrl
распознает определенные URL-адреса, которые не соответствуют этим критериям, и обрабатывает их единообразно. Они называются «устаревшими» URL-адресами файлов, а не «исправными» URL-адресами файлов.
В прошлом множество других приложений использовали другие системы. Некоторые добавили еще две косые черты. Например, путь UNC \\ remotehost \ share \ dir \ file.txt
станет file: ////remotehost/share/dir/file.txt
вместо "здорового" "file: //remotehost/share/dir/file.txt
.
URL-адреса файлов редко используются на веб-страницах в общедоступном Интернете, поскольку они подразумевают что файл существует на указанном хосте. Спецификатор хоста может использоваться для извлечения файла из внешнего источника, хотя конкретный протокол извлечения файла не указан; и его использование должно привести к появлению сообщения, информирующего пользователя о том, что механизм доступа к этой машине недоступен.