![将文件上传到只写目录失败](https://linux22.com/image/742953/%E5%B0%86%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%88%B0%E5%8F%AA%E5%86%99%E7%9B%AE%E5%BD%95%E5%A4%B1%E8%B4%A5.png)
在学校,我们使用 IIS 托管一个 WebDAV 服务器,学生可以在其中上传文件作为家庭作业的一部分。学生拥有不太常见的权限:他们可以在目录中创建文件,但创建后不能修改它。虽然当他们在学校并使用已安装的网络共享将文件复制到文件夹时,这种方法非常有效,但在家里使用 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
如您所见,第二个命令无法检索 props(404),因为该文件尚不存在 - 在我看来没什么大不了的。然后第三个命令创建(可能)空文件(201)。然后它得到锁定(200),稍后会出现一些失败的 (403) PUT 命令,这些命令可能尝试设置内容。执行这些操作后,文件夹中会出现一个名为 test.txt 的 0KB 文件(因为最后的 DELETE 命令也失败了)。
我尝试禁用服务器上的锁定,因为我认为客户端可能能够一次性完成写入操作,但根据日志文件,唯一改变的是 LOCK 命令返回 501。
我的问题: 有没有办法使用 WebDAV 用单个 PUT 命令而不是多个命令来写入文件,这样你只需要创造文件而不是更新他们?
此外,如果可能的话,我们希望继续使用原生的 Windows WebDAV 支持(例如这里)。如果不可能的话,我们对支持此类场景的第三方应用程序感兴趣。