我需要从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错误。
我可以做什么来强制分块发送此请求?
1条答案
按热度按时间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的浏览器使用。