ASP.NET Core 6: поток HttpContext.Request.Body не может превышать 4096C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 ASP.NET Core 6: поток HttpContext.Request.Body не может превышать 4096

Сообщение Anonymous »

Я пишу программу ASP.NET Core 6, которая получает множество файлов и записывает их в базу данных SQLite.
Я использую следующий код на клиенте для отправки файл:

Код: Выделить всё

var request = new HttpRequestMessage()
{
Method = HttpMethod.Post,
RequestUri = new Uri(server.serverBase + "/api/snapshot/UploadFile"),
};

using (FileStream filestream = File.Open(file.getFilePath(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
var length = filestream.Length.ToString();

var streamContent = new StreamContent(filestream, 16384);
streamContent.Headers.Add("Content-Type", "application/octet-stream");
streamContent.Headers.Add("Content-Length", length);

request.Content = streamContent;

var httpClient = new HttpClient();
httpClient.Timeout = new TimeSpan(0, 2, 0);

var response = httpClient.SendAsync(request).Result;
//Console.WriteLine(response.Content.ReadAsStringAsync().Result);
}
И следующий код на сервере для получения потока:

Код: Выделить всё

[HttpPost("UploadFile")]
[RequestSizeLimit(100000000000)]
public async Task UploadFile()
{
int CHUNK_SIZE = 1024 * 1024; //1 MB chunk size

using (Stream stream = HttpContext.Request.Body)
{
var buffer = new byte[CHUNK_SIZE];
int bytesRead;
int chunkNumber = 0;
long totalNumBytes = 0;
int progress = 0;

while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
System.Diagnostics.Debug.WriteLine(bytesRead);
await ProcessChunk(buffer, bytesRead, chunkNumber, totalNumBytes);
chunkNumber++;
}
}

return Ok("File uploaded and chunked successfully.");
}
Однако, несмотря на то, что размер буфера составляет 1048576 байт, отладочный вывод всегда равен 4096, то есть я читаю только 4096 байт на каждый «кусок» потока.
Как увеличить размер буфера сверх 4096 байт?
Моя конечная цель — взять каждый «кусок» и сохранить его в базе данных как большой двоичный объект, большую часть размер отправляемых файлов составляет ~3 КБ, поэтому я намеревался изменить размер каждого «куска» на 1 КБ, чтобы для каждого фрагмента файла использовалось меньше строк.
Я пробовал:
  • Изменение ограничений Kestrel
  • "enableBuffering" для объекта запроса
  • Использование MemoryStream
Я ожидал, что буфер потока HttpContext.Request.Body увеличится за пределы 4096 байт, но, похоже, я могу не получится пойти выше этого.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -than-4096
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ASP.NET Core 6: поток HttpContext.Request.Body не может превышать 4096
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Откуда httpcontext cascadingparameter httpcontext в приложении Blazor Server с идентификацией?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Ошибка Bad Gateway (502) при вызове API Core Core .NET .NET из другого API Core .NET .NET .NET .NET
    Anonymous » » в форуме C#
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • HttpContext.Current.Request.Params имеет значение null при регулировании низкой скорости сети.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»