C# 读取文本文件而不复制到硬盘

C# 读取文本文件而不复制到硬盘,c#,asp.net-core,io,C#,Asp.net Core,Io,我使用的是Asp.Net Core 3.0,我发现客户端将文本文件传递给我的API,然后API将使用我创建的名为ParseDataToModel()的函数将文本文件解析为数据模型,然后使用Entity Framework将该数据模型存储到数据库中。由于我的代码将文件解析为数据模型,因此如果没有必要,我真的不需要将其复制到硬盘上。关于流,我没有太多的知识,我也在谷歌上搜索了不少,但我想知道是否有一种方法可以检索上传文件的字符串数据,而不必将它们复制到硬盘上?这似乎是不必要的额外步骤。。。。下面是我

我使用的是Asp.Net Core 3.0,我发现客户端将文本文件传递给我的API,然后API将使用我创建的名为ParseDataToModel()的函数将文本文件解析为数据模型,然后使用Entity Framework将该数据模型存储到数据库中。由于我的代码将文件解析为数据模型,因此如果没有必要,我真的不需要将其复制到硬盘上。关于流,我没有太多的知识,我也在谷歌上搜索了不少,但我想知道是否有一种方法可以检索上传文件的字符串数据,而不必将它们复制到硬盘上?这似乎是不必要的额外步骤。。。。下面是我上传文件并插入数据库的代码:

 [HttpPost("upload"), DisableRequestSizeLimit]
    public IActionResult Upload()
    {
        var filePaths = new List<string>();
        foreach(var formFile in Request.Form.Files)
        {
            if(formFile.Length > 0)
            {
                var filePath = Path.GetTempFileName();
                filePaths.Add(filePath);

                using(var stream = new FileStream(filePath, FileMode.Create))
                {
                    formFile.CopyTo(stream);
                }
            }
        }

        BaiFiles lastFile = null;
        foreach(string s in filePaths)
        {
            string contents = System.IO.File.ReadAllText(s);
            BaiFiles fileToCreate = ParseFileToModel(contents);


            if (fileToCreate == null)
                return BadRequest(ModelState);

            var file = _fileRepository.GetFiles().Where(t => t.FileId == fileToCreate.FileId).FirstOrDefault();

            if (file != null)
            {
                ModelState.AddModelError("", $"File with id {fileToCreate.FileId} already exists");
                return StatusCode(422, ModelState);
            }

            if (!ModelState.IsValid)
                return BadRequest();

            if (!_fileRepository.CreateFile(fileToCreate))
            {
                ModelState.AddModelError("", $"Something went wrong saving file with id {fileToCreate.FileId}");
                return StatusCode(500, ModelState);
            }

            lastFile = fileToCreate;


        }
        return CreatedAtRoute("GetFile", new { fileId = lastFile.FileId }, lastFile);
    }

System.IO.File.ReadAllText(文件路径)
是一种方便的方法。它基本上是这样做的:

string text = null;

using (var stream = FileStream.OpenRead(filePath))
using (var reader = new StreamReader(stream))
{
    text = reader.ReadToEnd();
}
FormFile实现了一个方法,因此您可以简单地使用它来代替上面的
stream

string text = null;

using (var stream = formFile.OpenReadStream())
using (var reader = new StreamReader(stream))
{
    text = reader.ReadToEnd();
}

@约翰·莫妮卡:哇。我以前试过,但当时正试图将我的表单文件直接传递给StreamReader(NOOB)。我没有想到首先使用OpenReadStream,然后将流传递给StreamReader。。。非常感谢你!!我将很快补充一个答案:)非常感谢!对不起,我没有生气,哈哈,这是漫长的一天!
string text = null;

using (var stream = formFile.OpenReadStream())
using (var reader = new StreamReader(stream))
{
    text = reader.ReadToEnd();
}