Я пытаюсь отправить непрерывный поток из приложения C # в ASP Core REST API.
Я определяю непрерывный поток как, например, кто-то говорит в микрофон, а звук отправляется напрямую,без сохранения в локальном файле) в Rest API для сохранения в файл.
Я много раз искал в Google что-то подобное и до сих пор не нашел ничего действительно полезного.
Я пытался эмулировать его, отправив большой файл (297 МБ).
Это то, что у меня есть на стороне клиента:
string TARGETURL = "http://localhost:58000/api/file/";
string filePath = @"G:\Voice\Samples\The Monkey's Paw.wav";
byte[] fileContent = File.ReadAllBytes(filePath);
var dummyStream = new MemoryStream(fileContent);
var inputData = new StreamContent(dummyStream);
HttpResponseMessage response = this._httpClient.PostAsync(TARGETURL, inputData).Result;
HttpContent result = response.Content;
if (response.IsSuccessStatusCode)
{
string contents = result.ReadAsStringAsync().Result;
}
else
{
// do something
}
И на стороне сервера:
[Route("")]
[HttpPost]
public async Task<JsonResult> Post()
{
Dictionary<string, object> rv = new Dictionary<string, object>();
try
{
string file = Path.Combine(@"G:\Voice\Samples\dummy.txt");
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write,
FileShare.None, 4096, useAsync: true))
{
await Request.Body.CopyToAsync(fs);
}
// complete the transaction
rv.Add("success", true);
rv.Add("error", "");
}
catch(Exception ex)
{
}
return Json(rv);
}
Когда я отправляю файл, сервер выдает следующее исключение:
Content-Length запроса 1313137380 больше, чем ограничение размера тела запроса 30000000.
Я знаю, что мог бы увеличить предел размера тела, но это не долгосрочное решение, поскольку длина потока могла бы быть больше, чем любой предел, который я установил.
Вот почему я стараюсьng, чтобы найти решение, которое отправляет поток частями на сервер, чтобы перестроить и записать в файл.