在 IIS 上将文件从 angularJS 流式传输到 ASP.NET

Streaming file from angularJS to ASP.NET on IIS

提问人:santal 提问时间:11/9/2023 更新时间:11/9/2023 访问量:47

问:

我需要将大文件从AngularJS中的客户端发送到 ASP.NET 中的服务器(.Net Framework 4.7.1)。我的后端托管在 IIS 上。 由于 IIS 限制,我无法发送大于 2GB 的文件。

我找到了这篇文章: https://stackoverflow.com/a/54977830/11041310 如何绕过此限制的说明在哪里。

我尝试像在帖子中一样设置后端并使用 Insomnia 客户端发送文件。 我可以看到,当我使用标题“Transfer-Encoding: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);
        }
    }
}

尽管设置了标头“Transfer-Encoding”,但我可以在 Chrome 开发者控制台中看到此标头未发送,并且收到 400 错误。

我该怎么做才能强制发送此请求分块?

asp.net .NET AngularJS IIS

评论

0赞 Albert D. Kallal 11/9/2023
要上传任何大小的文件,您希望采用ajax文件上传器。这种上装机被夹成一口大小的小零件。它们还提供了一个不错的进度条。您肯定不想为此使用简单的 Web 端点。有了这个,我们能够轻松上传大于 2 gig 的文件
0赞 YurongDai 11/14/2023
你的问题解决了吗?在这个问题上有什么进展吗?期待您的回复,谢谢!

答:

0赞 YurongDai 11/9/2023 #1

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 的浏览器使用。