C# Фильтр расширения файла перед загрузкой - PullRequest
2 голосов
/ 13 июля 2020

Раньше я использовал PHP. Потом мне дали проект на основе C#, и я не знал, что делать. Даже я пытался что-то напечатать, но это всегда было ошибкой.

Ниже (я думаю, потому что я нашел этот файл в каталоге Controller) контроллер загружаемого файла, я хочу ограничить, чтобы можно было только изображения загружено. Кто-нибудь может помочь?

public IActionResult UploadFile ([FromForm] IFormFile file, [FromForm] string fileName) {
  return Ok (new {
    id = _fileService.UploadFile (fileName, file),
      fileName = file.FileName,
      fileSize = file.Length,
      fileType = file.ContentType,
      file = file
  });
}

1 Ответ

5 голосов
/ 13 июля 2020

(К вашему сведению, я бы удостоверился, что код, который у вас есть, был проверен на работоспособность, прежде чем вы что-либо измените.)

Если вы пытаетесь ограничить типы файлов, которые могут быть загружены, вы должны иметь возможность чтобы проверить как тип файла (Content Type), так и расширение.

ContentType должен иметь что-то вроде «image / png» или «image / jpeg». Вы можете найти списки типов изображений в Интернете, я нашел этот ответ, в котором было много общих: { ссылка }

Чтобы проверить расширение, я считаю, вы могли бы проанализировать имя файла, например это с использованием Path.GetExtension :

var extension = Path.GetExtension(file.FileName);

(Путь из пространства имен System.IO. Используйте System.IO.Path... или добавьте using System.IO; в начало файла C# )

Затем вы можете проверить расширение, например, для «.png» или «.jpeg».

Проверки на стороне клиента

О, и ваш вопрос упоминался ранее загрузить ". Технически на этом этапе файл уже загружен. Если вы пытаетесь вообще ограничить то, что загружается, вы можете добавить некоторые проверки на стороне клиента в форму загрузки. Обратите внимание, что он не является пуленепробиваемым, и вам все равно нужно проверить серверную часть, как я упоминал выше.

Другой совет

Лично я бы порекомендовал немного реорганизовать ваш код. Вот как бы это выглядело:

public IActionResult UploadFile ([FromForm] IFormFile file, [FromForm] string fileName)
{
    var fileId = _fileService.UploadFile(fileName, file);
    
    return Ok (new {
        id = fileId,
        fileName = file.FileName,
        fileSize = file.Length,
        fileType = file.ContentType,
        // Removing this from the Response.
        // Probably don't need to send the file back.
        // file = file
    });
}

Я думаю, это даст вам лучшие сообщения об ошибках, если что-то пойдет не так с UploadFile(). Также (для меня) немного яснее последовательность / порядок вещей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...