从AngularJS到IIS上的ASP.NET的流式文件

biswetbf  于 12个月前  发布在  Angular
关注(0)|答案(1)|浏览(129)

我需要从AngularJS的客户端发送大文件到ASP.NET的服务器(.Net Framework 4.7.1)。我的后端托管在IIS上。由于IIS限制,我无法发送大于2GB的文件。
我发现了这篇文章:https://stackoverflow.com/a/54977830/11041310在哪里是如何绕过这个限制的指令。
我尝试设置后端像在后和发送文件使用Incredible客户端.我可以看到,当我发送大文件使用头“传输编码:chunked”,我可以绕过这个限制和文件上传.
现在我尝试将相同的头文件添加到我的AngularJs客户端,如下所示:

$http.post("/api/upload", formData, {
    transformRequest: angular.identity,
    headers: { 'Transfer-Encoding': 'chunked' }
})

字符串
像这样的后端代码:

[System.Web.Http.HttpPost]
public async Task<HttpResponseMessage> UploadFileAsync()
{
    var stream = await Request.Content.ReadAsStreamAsync();
    using (var fileStream = File.Create("c:\\file.txt"))
    {
        byte[] buffer = new byte[8 * 1024];
        int len;
        while ((len = stream.Read(buffer, 0, buffer.Length)) > 0)
        {
            fileStream.Write(buffer, 0, len);
        }
    }
}


尽管设置了头“传输编码”,我可以看到在Chrome开发人员控制台,这个头是不发送,我收到400错误。
我可以做什么来强制分块发送此请求?

eufgjt7s

eufgjt7s1#

IIS中的AspEnableChunkedEncoding可以启用分块编码。
参考链接:
https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms526005(v=vs.90)
https://techcommunity.microsoft.com/t5/iis-support-blog/enabling-8220-transfer-encoding-chunked-8221-in-the-response/ba-p/287869
即使AspEnableChunkedEncoding设置为true,分块传输编码也仅由支持并启用了HTTP 1.1的浏览器使用。

相关问题