【发布时间】:2019-02-14 07:25:57
【问题描述】:
问题:我想知道一个文件如果被发送到一个端点是如何被读取的。
阅读多篇文章并进行一些研究后,我能够将文件发送到 Amazon S3 存储桶。下面是working code,但我不明白文件是如何通过邮递员发送到我的 API 的,以及处理是如何发生的,这个文件是如何在代码中读取的。有人可以帮我解码这段代码吗?
我在想要理解的代码中添加了行号。
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;
}
P.S:我正在通过 Postman 发送一个文件来测试这个端点的工作情况。
我对上述代码的理解。
Line Number 1: 这是一个 HTTPPOST 请求,这意味着我发送的内容将在请求的正文中,而不是在标头或 URL 中。由于我是发送文件,所以文件内容会在请求体中发送。
Line Number 2: asyn 所以它将在单独的线程上运行,这样我的 UI(如果有的话)就会响应。
Line Number 3: 我猜 Request 基本上是读取任何 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: 因为我有要处理的流,所以我正在创建一个流读取器实例并将流传递给它。 (通俗地说:我正在传递我正在阅读的一行文件)?
除此之外,我迷路了。在这之后我完全糊涂了。什么是流?这是我文件中的一行吗?
问题:请有人帮助我了解上述代码中发生的情况。我认为我不能直接将 文件行与流链接。请指导我。
【问题讨论】:
标签: c# .net file asp.net-web-api asp.net-web-api2