IFormFile сохранить в базу данных без временного каталога - PullRequest
0 голосов
/ 20 марта 2020

Итак, я сейчас следую этому учебнику. Я сделал то же самое, когда дело дошло до HTML, но для моего контроллера я сделал что-то другое.

В этом уроке они используют какой-то временный каталог для хранения IFormFile, т.е.

var filePath = Path.GetTempFileName(); //we are using Temp file name just for the example. Add your own file path.
filePaths.Add(filePath);

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

Однако я обнаружил, что в действительности нет необходимости делать то, что я собираюсь сделать, а именно - получить файл в byte[] вместе с именем файла, чтобы я мог передать их в свою базу данных. Что я могу сделать следующим образом:

string filename = string.Empty;
byte[] fileBytes = null;
foreach (var formFile in files)
{
    if (formFile.Length > 0)
    {
        filename = formFile.FileName;
        BinaryReader reader = new BinaryReader(formFile.OpenReadStream());
        fileBytes = reader.ReadBytes((int)formFile.Length);
    }
}
//logic for storing in the db

Следовательно, какова цель сделать то, что было сделано выше сниппита (GetTempFileName)?

  1. Обеспечивает ли это некоторую безопасность, если файлы превышают определенный размер, или я в порядке с моим кодом?
  2. Если по умолчанию файлы FormFiles хранятся в каком-то временном каталоге, как бы я тогда избавиться от них? Они утилизируются после того, как мой результат был отправлен?

Я пытался прочитать документацию по этому поводу - оставил меня еще более смущенным.

...