Вопрос. Я хочу знать, как читается файл, если он отправлен в конечную точку.
После прочтения нескольких статей и проведения некоторых исследований я могу отправить файл в корзину Amazon S3.Ниже working code
, но я не понимаю, как файл отправляется в мой API через Postman и как происходит обработка, как этот файл читается в коде.Может кто-нибудь, пожалуйста, помогите мне расшифровать этот код.
Я добавил номера строк в код, который хочу понять.
Line
Number
1 [httppost]
2 public async Task<bool> Upload()
{
try
{
3 var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
4 foreach (var content in filesReadToProvider.Contents)
{
5 var stream = await content.ReadAsStreamAsync();
6 using (StreamReader sr = new StreamReader(stream))
{
string line = "";
7 while ((line = sr.ReadLine()) != null)
{
8 using (MemoryStream outputStream = new MemoryStream())
9 using (StreamWriter sw = new StreamWriter(outputStream))
{
sw.WriteLine(line);
10 sw.Flush();
PutRecordRequest putRecord = new PutRecordRequest();
putRecord.DeliveryStreamName = myStreamName;
Record record = new Record();
11 outputStream.Position = 0;
record.Data = outputStream;
putRecord.Record = record;
try
{
await kinesisClient.PutRecordAsync(putRecord);
}
catch (Exception ex)
{
Console.WriteLine("Failed to send record to Kinesis. Exception: {0}", ex.Message);
}
}
}
}
}
}
catch (Exception e)
{
}
return true;
}
PS: Я отправляю файл через Почтальон для проверки работы этой конечной точки.
Мое обязательство по приведенному выше коду.
Line Number 1:
Это запрос HTTPPOST, так что это означает, чтосодержимое, которое я отправляю, будет в теле запроса, а не в заголовках или URL.Поскольку я отправляю файл, содержимое файла будет отправлено в теле запроса.
Line Number 2:
asyn, поэтому он будет запущен в отдельном потоке, поэтому мой пользовательский интерфейс (если есть) будет отзывчивым.
Line Number 3:
Я предполагаю, что Запрос - это, в основном, дескриптор для чтения содержимого тела для любых запросов API, поэтому я читаю содержимое, используя Request.Content
,
Вопрос: Чтоэто значение ReadAsMultipartAsync
: оно говорит: Reads all body parts within a MIME multipart message and produces a set of System.Net.Http.HttpContent instances as a result.
?Что это значит?Означает ли это, что если мой файл содержит 10 строк, он читает все 10 строк и хранит их в памяти (в терминах непрофессионала)?
Line Number 4:
Я предполагаю, что filesReadToProvider.Contents
снова дескриптордля всех тех 10 строк, которые у меня есть в файле.Означает ли это, что если в моем файле 10 строк , цикл будет выполняться 10 раз ( Я думаю, что я не прав ).
Line Number 5:
ReadAsStreamAsync
там написано: Serialize the HTTP content and return a stream that represents the content as an asynchronous operation.
.Значит ли это, что он читает по 1 строке за раз и сериализует ее?Но почему он сериализует строки?
LineNumber 6:
Поскольку я имею дело с потоками, я создаю экземпляр потокового ридера и передаю ему поток.(в терминах непрофессионала: я передаю одну строку файла, которую читаю)?
Помимо этого я потерян.Я полностью запутался после этого.Что такое поток?Это одна строка в моем файле?
Вопрос: Пожалуйста, кто-нибудь, помогите мне понять, что происходит в приведенном выше коде.Я не думаю, что могу напрямую связать строку файла с потоком .Пожалуйста, ведите меня.