Как я могу прочитать файл, который будет загружен из формы в .Net Core API? - PullRequest
1 голос
/ 25 апреля 2019

Я создаю метод в моем .Net Core API, который будет загружать файл.

[HttpPost]
public async Task<IActionResult> ReadFile(IFormFile file)
{
    return BadRequest(file);
}

Я делаю return BadRequest(file) для того, чтобы прочитать, что мне пришло на Почтальон .

Результат таков:

{
    "contentDisposition": "form-data; name=\"file\"; filename=\"data.dat\"",
    "contentType": "application/octet-stream",
    "headers": {
        "Content-Disposition": [
            "form-data; name=\"file\"; filename=\"data.dat\""
        ],
        "Content-Type": [
            "application/octet-stream"
        ]
    },
    "length": 200,
    "name": "file",
    "fileName": "data.dat"

}

Я вижу в документации Microsoft это:

using (StreamReader sr = new StreamReader("TestFile.txt"))
{
    // Read the stream to a string, and write the string to the console.
        String line = sr.ReadToEnd();
        Console.WriteLine(line);
}

Но пользователю придется выбрать файл для чтения, приложению не нужно будет заходить в папку и читать файл.

Можно это сделать? А можно мне ссылку, чтобы помочь мне сделать это?

Обновление

Я хочу, чтобы метод ReadFile прочитал содержимое моего файла, который будет загружен в форму.

Поэтому у меня будет строка, в которой будет содержаться содержимое моего файла, и после этого я смогу сделать все, что хотел в этом файле.

Например, у меня есть файл, и в этом файле написано УРОК , с методом ReadFile Я получу слово урок в строке.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

В вашем контроллере:

  1. Проверьте, содержит ли IFormFile file что-то
  2. Проверьте, является ли расширение файла тем, которое вы ищете (.dat)
  3. Проверьте, является ли тип Mime файла правильным, чтобы избежать атак

Затем, если все в порядке, вызовите класс Service для чтения вашего файла.

В вашем Сервисе вы можете сделать что-то подобное:

var result = new StringBuilder();
using (var reader = new StreamReader(file.OpenReadStream()))
{
    while (reader.Peek() >= 0)
        result.AppendLine(await reader.ReadLineAsync()); 
}
return result.ToString();

Надеюсь, это поможет.

1 голос
/ 25 апреля 2019

Файл будет связан с вашим параметром IFormFile. Вы можете получить доступ к потоку через:

using (var stream = file.OpenReadStream())
{
    // do something with stream
}

Если вы хотите прочитать его как строку, вам понадобится экземпляр StringReader:

string fileContents;
using (var stream = file.OpenReadStream())
using (var reader = new StringReader(stream))
{
    fileContents = await reader.ReadToEndAsync();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...