Прочитать на английском

Поделиться через


Файлы

API администрирования IIS предоставляет набор API файлов для непосредственного взаимодействия с файловой системой. Это означает, что API можно использовать локально или удаленно для развертывания содержимого, внесения изменений или проверка, если файлы актуальны.

Общие файлы (/api/files)

Конечная точка /api/files предоставляет метаданные и содержимое файлов и каталогов на компьютере. Файлы, доступные через этот API, ограничены файлами, указанными в разделе конфигурации файлов файла appsettings.json . Запрос конечной точки /api/files без указания каталога приведет к перечислению расположений, присутствующих в конфигурации. Эти расположения представляют корень всех путей файловой системы, доступных через API. Файлы можно создавать, удалять и обрабатывать с помощью стандартных команд http post, delete и patch при условии, что путь к файлу содержит утверждения, необходимые для выполнения операции.

Примеры

Файл

{
    "name": "iisstart.png",
    "id": "{id}",
    "type": "file",
    "physical_path": "C:\\inetpub\\wwwroot\\iisstart.png",
    "exists": "true",
    "size": "98757",
    "created": "2017-01-09T18:08:33.5130112Z",
    "last_modified": "2017-01-09T17:48:13.6180477Z",
    "last_access": "2017-01-09T17:48:13.6180477Z",
    "e_tag": "1d26aa08c67ed45",
    "parent": {
        "name": "wwwroot",
        "id": "{id}",
        "type": "directory",
        "physical_path": "C:\\inetpub\\wwwroot"
    },
    "claims": [
        "read",
        "write"
    ]
}

Каталог

{
    "name": "wwwroot",
    "id": "{id}",
    "type": "directory",
    "physical_path": "C:\\inetpub\\wwwroot",
    "exists": "true",
    "created": "2017-01-09T18:08:33.1380257Z",
    "last_modified": "2017-01-30T17:01:15.2619212Z",
    "last_access": "2017-01-30T17:01:15.2619212Z",
    "total_files": "7",
    "parent": {
        "name": "inetpub",
        "id": "a-nA1LZCBZ9jIqxr6e2uWg",
        "type": "directory",
        "physical_path": "C:\\inetpub"
    },
    "claims": [
        "read",
        "write"
    ]
}

Файлы веб-сервера (/api/webserver/files)

Конечная точка /api/webserver/files предоставляет структуру виртуальных файлов, созданную службами IIS. Все файловые ресурсы в этой конечной точке принадлежат к определенному веб-сайту, и путь к этому файлу относится к веб-сайту, к которому он принадлежит. Это позволяет считать веб-сайты корневыми файловой системы, что желательно в сценариях веб-сервера. Виртуальные каталоги включаются в обычные каталоги для полного представления иерархии виртуальных файлов веб-сайта.

Все файлы веб-сервера имеют ссылку на file_info который представляет собой метаданные файла, которые можно получить из конечной точки /api/files .

Примеры

Веб-файл

{
    "name": "iisstart.png",
    "id": "{id}",
    "type": "file",
    "path": "/iisstart.png",
    "parent": {
        "name": "",
        "id": "{id}",
        "type": "application",
        "path": "/"
    },
    "website": {
        "name": "Default Web Site",
        "id": "{id}",
        "status": "started"
    },
    "file_info": {
        "name": "iisstart.png",
        "id": "{id}",
        "type": "file",
        "physical_path": "C:\\inetpub\\wwwroot\\iisstart.png"
    }
}

Веб-каталог

{
    "name": "imgs",
    "id": "{id}",
    "type": "directory",
    "path": "/imgs",
    "parent": {
        "name": "",
        "id": "{id}",
        "type": "application",
        "path": "/"
    },
    "website": {
        "name": "Default Web Site",
        "id": "{id}",
        "status": "started"
    },
    "file_info": {
        "name": "imgs",
        "id": "{id}",
        "type": "directory",
        "physical_path": "C:\\inetpub\\wwwroot\\imgs"
    }
}

Копирование и перемещение файлов (/api/files/copy | /api/files/move)

API поддерживает копирование и перемещение файлов через конечные точки /api/files/copy и /api/files/move . Процесс копирования файла выполняется путем выполнения запроса POST к API, описывающего требуемую операцию копирования.

POST

{
  "name":"{optional name of the destination file}",
  "file": {
    "id": "{id property of the file to copy}"
  },
  "parent": {
    "id": "{id property of the directory to copy to}"
  }
}

Управление содержимым файла (/api/files/content)

Ресурсы в маршруте /api/files содержат только метаданные для файлов. Для управления содержимым файла необходимо использовать маршрут /api/files/content/{id} . Этот маршрут использует тип контента application/octet-stream для передачи данных. Выполнение запроса GET к URL-адресу содержимого файла приведет к извлечению необработанных байтов файла. Эта операция поддерживает запросы диапазона HTTP, поэтому файл можно скачать блоками. Выполнение запроса PUT к URL-адресу содержимого файла заменит содержимое файла текстом запроса. Эта операция поддерживает HTTP-запросы диапазона содержимого для обеспечения управления произвольным доступом к файлам.

Скачивание 2-го файла размером 500 байт

    GET /api/files/content/{id}
    Access-Token: Bearer {Access-Token}
    Range: bytes=500-999

Изменение 2-го 500-байтового файла размером 1000 байт

    PUT /api/files/content/{id}
    Access-Token: Bearer {Access-Token}
    Content-Range: bytes 500-999/1000
    Content-Length: 500

Скачивание файлов (/api/files/download)

Файлы можно скачать через конечную точку /api/files/content API. Недостаток этой конечной точки заключается в том, что, так как она находится в маршруте API , ей требуется маркер доступа. Это означает, что файл нельзя скачать через браузер. Конечная точка /api/files/download позволяет создавать временные ссылки для скачивания. Эти ссылки для скачивания являются уникальными, создаются случайным образом и не требуют маркера доступа. Созданные ссылки для скачивания принимают вид /downloads/{random_sequence}. Необязательный параметр срока жизни (ttl) доступен при создании ссылки для скачивания, чтобы указать, как долго должна быть доступна ссылка для скачивания. Значение по умолчанию — пять секунд.

При создании скачивания ссылка на скачивание возвращается в заголовке Location HTTP-ответа.

POST

{
    "file": {
        "id": "{id of the file to download}"
    },
    "ttl": "10000"
}

Использование общих папок

API файлов можно использовать для управления файлами, расположенными в общих папках. Чтобы включить эту функцию, общая папка должна разрешить необходимые разрешения файловой системы для субъекта, представляющего компьютер, на котором выполняется API. Например, предположим, что в папке \\share\images находится общее содержимое, и мы хотим разрешить API, работающему на веб-сервере с именем web-prod-1 , перечислять эти файлы. Чтобы это сделать, администратор должен изменить список ACL каталога \\share\images , чтобы разрешить доступ на чтение к объекту Active Directory web-prod-1 . После этого служба на компьютере web-prod-1 сможет получить доступ к этому каталогу, прочитать файлы, а затем предоставить их через API.

Расположения — корни API файлов (/api/files/locations)

Доступ к файловой системе API ограничен набором корневых папок, называемых расположениями, которые указаны в файле appsettings . Эти расположения отображаются как корневые с точки зрения API файлов, но на физическом диске это могут быть вложенные папки, корень диска или даже сетевая папка. Для каждого расположения доступ на чтение и запись контролируется независимо. ВСЕ пути в файловой системе, которые не входят в расположение, не будут видны API файловой системы.

Начиная с версии 2.2.0 параметры расположения доступны через конечную точку /api/files/locations . Эта конечная точка заблокирована для пользователей в группе владельцев API. Это означает, что для доступа к конечной точке расположений требуется проверка подлинности Windows. Добавление или удаление расположений приведет к добавлению или удалению доступа к файловой системе из API. Эта конечная точка поддерживает GET, PATCH, POST и DELETE для создания, изменения и удаления существующих расположений. Расположение редактирования не влияет на физические файлы, оно только управляет представлением ФАЙЛОВой системы API.

Конфигурация расположений по умолчанию

{
    "locations": [
        {
            "alias": "inetpub",
            "id": "{id}",
            "path": "C:\\inetpub",
            "claims": [
                "read"
            ]
        }
    ]
}