В C#, как я могу знать тип файла от байта []?

Этот статья охватывает большинство проблем. Если Вы используете SQL Server 2008, проверяете использование нового типа FILESTREAM, как обсуждено Paul Randal здесь .

28
задан AndreMiranda 31 October 2009 в 16:25
поделиться

5 ответов

Не уверен, но, возможно, вам стоит разузнать о магических числах .

Обновление: Читая об этом, я не думаю, что это очень надежно.

9
ответ дан 28 November 2019 в 03:03
поделиться

Вы не можете узнать его из потока байтов, но вы можете сохранить тип MIME при первоначальном заполнении байта [] .

8
ответ дан 28 November 2019 в 03:03
поделиться

Вы же не хотите так делать. Вызовите Path.GetExtension при загрузке файла и передайте расширение с байтом [].

1
ответ дан 28 November 2019 в 03:03
поделиться

Краткий ответ: вы не можете

Более длинный ответ: Обычно программы используют расширение файла, чтобы узнать, с каким типом файла они имеют дело. Если у вас нет этого расширения, вы можете только догадываться ... например, вы можете посмотреть на первые несколько байтов и проверить, распознаете ли вы хорошо известный заголовок (например, тег объявления XML или заголовок растрового изображения или JPEG ). Но в конце концов это всегда будет предположением: без каких-либо метаданных или информации о содержимом массив байтов просто бессмысленен ...

7
ответ дан 28 November 2019 в 03:03
поделиться

Напоминает мне о тех днях, когда мы, эээээ, "некоторые люди" использовали для обмена 50-мегабайтными rar-файлами на ранних сайтах бесплатного хостинга изображений, просто добавляя расширение .gif к .rar имя файла.

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

С другой стороны, если у вашего приложения нет причин не доверять загруженному расширению и / или типу MIME, тогда просто получите их при загрузке файла, как ответы, полученные от @rossfabircant и @RandolphPotter. создайте тип, который имеет byte [], а также исходное расширение или mimetype, и передайте его.

Если вам нужно убедиться, что файл действительно является определенным ожидаемым типом, например допустимым .jpeg или. png, вы можете попробовать интерпретировать файл как эти типы и посмотреть, успешно ли он открывается. (System.Drawing.Imaging.ImageFormat)

Если вы пытаетесь классифицировать файл только по двоичному содержимому, и это может быть любой формат во всем мире, это действительно сложная и открытая проблема. не на 100% надежный способ сделать это. Вы можете использовать TrID против него, и, вероятно, есть аналогичные инструменты судебной экспертизы, используемые следователями правоохранительных органов, если вы можете их найти (и позволить себе).

Если вам не нужно делать это жестко. , не надо.

открытая проблема, и не существует 100% надежного способа ее решения. Вы можете использовать TrID против него, и, вероятно, есть аналогичные инструменты судебной экспертизы, используемые следователями правоохранительных органов, если вы можете их найти (и позволить себе).

Если вам не нужно делать это жестко. , не надо.

открытая проблема, и не существует 100% надежного способа ее решения. Вы можете использовать TrID против него, и, вероятно, есть аналогичные инструменты судебной экспертизы, используемые следователями правоохранительных органов, если вы можете их найти (и позволить себе).

Если вам не нужно делать это жестко. , не надо.

2
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: