我的网站接受文件上传。可以通过WebDAV(PUT)或POST上传文件。对于POST,我的HttpModule拦截请求并将POST的BODY保存到服务器上的文件中。对于PUT,WebDAV会处理文件的创建。
我的HttpModule还将每个文件上传记录在其OnEndRequest事件处理程序中。
我发现FOR PUT(WebDAV)都
ctx.Request.Headers["Content-Length"]
ctx.Request.ContentLength
始终等于零,尽管对于POST,这两个都包含正文内容的长度。
我需要怎么做才能通过WebDAV上传文件的长度?
答案 0 :(得分:0)
在撰写本文时,我意识到对于PUT,我知道文件PUT到服务器的名称。所以我用以下代码解决了这个问题:
if (ctx.Request.ContentLength == 0)
{
if (ctx.Request.HttpMethod == "PUT")
{
FileInfo fi = new FileInfo(ctx.Items["OutFile"].ToString());
fileSize = fi.Length;
}
}
else
{
fileSize = ctx.Request.ContentLength;
}
(其中ctx.Items [“ OutFile”]是我从先前的事件处理程序中保留的文件的名称。)
现在这对我有用。而且,能够获得此信息而不必访问文件系统将是一件很不错的事情。如果您知道如何从当前正在执行的http事务的上下文中获取它,那么我将感谢您的建议。