Я использую следующий код на клиенте для отправки файл:
Код: Выделить всё
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.");
}
Как увеличить размер буфера сверх 4096 байт?
Моя конечная цель — взять каждый «кусок» и сохранить его в базе данных как большой двоичный объект, большую часть размер отправляемых файлов составляет ~3 КБ, поэтому я намеревался изменить размер каждого «куска» на 1 КБ, чтобы для каждого фрагмента файла использовалось меньше строк.
Я пробовал:
- Изменение ограничений Kestrel
- "enableBuffering" для объекта запроса
- Использование MemoryStream
Подробнее здесь: https://stackoverflow.com/questions/790 ... -than-4096