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

布兰登·米勒

我使用的是Asp.Net Core 3.0,我发现自己处在客户端将文本文件传递给我的API的情况下,API随后会使用我创建的函数将文本文件解析为数据模型ParseDataToModel(),然后使用实体框架将该数据模型存储到数据库中。由于我的代码将文件解析为数据模型,因此我真的不需要将其复制到硬盘上。我对Streams并不了解很多,我已经在Google上搜索了很多,但是我想知道是否有一种方法可以检索上载文件的字符串数据,而无需实际将它们复制到硬盘上?这似乎是不必要的额外步骤。...下面是我的文件上传和插入数据库代码:

 [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()让我感到它已被复制到某个地方的临时目录中。

在使用下面的约翰的答案之后,这是对任何有兴趣的人的修订代码:

[HttpPost("upload"), DisableRequestSizeLimit]
    public IActionResult Upload()
    {
        var filePaths = new List<string>();
        BaiFiles lastFile = null;
        foreach (var formFile in Request.Form.Files)
        {
            if (formFile.Length > 0)
            {
                using (var stream = formFile.OpenReadStream())
                {
                    using (var sr = new StreamReader(stream))
                    {
                        string contents = sr.ReadToEnd();

                        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;
                    }
                }

            }  
        }
        if(lastFile == null)
           return NoContent();
        else
            return CreatedAtRoute("GetFile", new { fileId = lastFile.FileId }, lastFile);
    }
约翰

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

string text = null;

using (var stream = FileStream.OpenRead(filePath))
using (var reader = new StreamReader(stream))
{
    text = reader.ReadToEnd();
}

FormFile实现了OpenReadStream方法,因此您可以简单地使用它代替stream上面的方法:

string text = null;

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将文本/纯文本文件从Google云端硬盘复制到Android App本地文件

来自分类Dev

读取文本文件,复制到C中的数组

来自分类Dev

Applescript:从文本文件中读取内容,将内容复制到剪贴板

来自分类Dev

将数据从文本文件复制到Excel

来自分类Dev

将文件列表复制到文本文件,但排除新的文本文件

来自分类Dev

使用Automator读取文本文件并将内容复制到另一个文件夹

来自分类Dev

使用终端将文本从LibreOffice Writer复制到文本文件

来自分类Dev

使用终端将文本从LibreOffice Writer复制到文本文件

来自分类Dev

如何将文本文件复制到另一个文件?

来自分类Dev

批处理文件-将文本文件的内容复制到剪贴板

来自分类Dev

在PowerShell中将文件名复制到文本文件

来自分类Dev

如何将代码从文本文件复制到.py文件?

来自分类Dev

如何将文本文件复制到另一个文件?

来自分类Dev

将数据从文本文件复制到另一个文件

来自分类Dev

读取文本文件到数组

来自分类Dev

将终端上发生的所有事情复制到文本文件

来自分类Dev

如何获取文本文件的内容并将其复制到剪贴板?

来自分类Dev

将上一行从文本文件复制到当前行

来自分类Dev

将本地文本文件复制到远程桌面

来自分类Dev

从终端,如何将文本文件从桌面复制到USB?

来自分类Dev

如何将单词从文本文件复制到C上的数组

来自分类Dev

将变量的内容复制到文本文件中

来自分类Dev

将上一行从文本文件复制到当前行

来自分类Dev

如何将文本文件中的数据复制到剪贴板?

来自分类Dev

将 SQL Server 表记录复制到文本文件中?

来自分类Dev

将文本文件复制到 char* 数组中

来自分类Dev

如何在文本文件中的 bs4 中将输出复制到终端

来自分类Dev

将文本文件的前两行复制到另一个文本文件的批处理文件

来自分类Dev

Python文件I / O:实现将一个文本文件的内容复制到一个空文本文件的功能

Related 相关文章

  1. 1

    如何将文本/纯文本文件从Google云端硬盘复制到Android App本地文件

  2. 2

    读取文本文件,复制到C中的数组

  3. 3

    Applescript:从文本文件中读取内容,将内容复制到剪贴板

  4. 4

    将数据从文本文件复制到Excel

  5. 5

    将文件列表复制到文本文件,但排除新的文本文件

  6. 6

    使用Automator读取文本文件并将内容复制到另一个文件夹

  7. 7

    使用终端将文本从LibreOffice Writer复制到文本文件

  8. 8

    使用终端将文本从LibreOffice Writer复制到文本文件

  9. 9

    如何将文本文件复制到另一个文件?

  10. 10

    批处理文件-将文本文件的内容复制到剪贴板

  11. 11

    在PowerShell中将文件名复制到文本文件

  12. 12

    如何将代码从文本文件复制到.py文件?

  13. 13

    如何将文本文件复制到另一个文件?

  14. 14

    将数据从文本文件复制到另一个文件

  15. 15

    读取文本文件到数组

  16. 16

    将终端上发生的所有事情复制到文本文件

  17. 17

    如何获取文本文件的内容并将其复制到剪贴板?

  18. 18

    将上一行从文本文件复制到当前行

  19. 19

    将本地文本文件复制到远程桌面

  20. 20

    从终端,如何将文本文件从桌面复制到USB?

  21. 21

    如何将单词从文本文件复制到C上的数组

  22. 22

    将变量的内容复制到文本文件中

  23. 23

    将上一行从文本文件复制到当前行

  24. 24

    如何将文本文件中的数据复制到剪贴板?

  25. 25

    将 SQL Server 表记录复制到文本文件中?

  26. 26

    将文本文件复制到 char* 数组中

  27. 27

    如何在文本文件中的 bs4 中将输出复制到终端

  28. 28

    将文本文件的前两行复制到另一个文本文件的批处理文件

  29. 29

    Python文件I / O:实现将一个文本文件的内容复制到一个空文本文件的功能

热门标签

归档