提问人:santal 提问时间:11/9/2023 更新时间:11/9/2023 访问量:47
在 IIS 上将文件从 angularJS 流式传输到 ASP.NET
Streaming file from angularJS to ASP.NET on IIS
问:
我需要将大文件从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 错误。
我该怎么做才能强制发送此请求分块?
答:
0赞
YurongDai
11/9/2023
#1
IIS 中的 AspEnableChunkedEncoding 可以启用分块编码。
参考链接:
https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms526005(v=vs.90)
即使 AspEnableChunkedEncoding 设置为 true,分块传输编码也仅由支持并启用了 HTTP 1.1 的浏览器使用。
评论