Назад | Перейти на главную страницу

Ошибка загрузки файла в каталог только для записи

В школе мы размещаем сервер WebDAV с IIS, где учащиеся могут загружать файлы как часть своего домашнего задания. У учащихся есть не очень распространенные разрешения: они могут создавать файл в каталоге, но не могут изменять его после того, как он был создан. Хотя это работает достаточно хорошо, когда они в школе копируют файл в папку, используя подключенный сетевой ресурс, это не работает из дома с использованием WebDAV. Кажется, что WebDAV сначала создает пустой файл, а затем пытается вставить его содержимое. Журнал IIS для загрузки файла в каталог выглядит так:

#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2019-09-20 00:01:23
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
...
2019-09-20 13:32:20 192.168.168.13 PROPFIND / - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 207 0 0 31
2019-09-20 13:32:20 192.168.168.13 PROPFIND /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 404 0 2 31
2019-09-20 13:32:20 192.168.168.13 PUT /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 201 0 0 31
2019-09-20 13:32:20 192.168.168.13 LOCK /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 200 0 0 31
2019-09-20 13:32:20 192.168.168.13 PROPPATCH /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 207 0 0 31
2019-09-20 13:32:20 192.168.168.13 HEAD /AnAbgabe/EGGJ/Abgabe/test.txt - 443 - 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 401 2 5 15
2019-09-20 13:32:20 192.168.168.13 HEAD /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 200 0 0 31
2019-09-20 13:32:20 192.168.168.13 PUT /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 403 3 5 15
2019-09-20 13:32:20 192.168.168.13 PUT /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 403 3 5 15
2019-09-20 13:32:20 192.168.168.13 PUT /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 403 3 5 31
2019-09-20 13:32:20 192.168.168.13 PUT /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 403 3 5 31
2019-09-20 13:32:20 192.168.168.13 DELETE /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 403 3 5 31
2019-09-20 13:32:20 192.168.168.13 DELETE /AnAbgabe/EGGJ/Abgabe/test.txt - 443 z_testschueler 80.110.119.167 Microsoft-WebDAV-MiniRedir/10.0.18362 - 412 0 2377062848 31

Как вы можете видеть, вторая команда не может получить реквизиты (404), потому что файл еще не существует - ничего страшного, IMO. Третья команда затем создает (возможно) пустой файл (201). Тогда это становится заблокирован (200) и немного позже есть несколько неудачных (403) команд PUT, которые, вероятно, пытаются установить содержимое. После этих операций внутри папки находится файл размером 0 КБ с именем test.txt (поскольку команды DELETE в конце также не работают).

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

Мой вопрос: Есть ли способ с помощью WebDAV записать файл с помощью одной команды PUT вместо нескольких, чтобы вы только Создайте файлы вместо обновление их?

Также, если возможно, мы хотели бы продолжить использовать встроенную поддержку Windows WebDAV (объясненную, например, Вот). Если это невозможно, нас интересуют сторонние приложения, поддерживающие такие сценарии.