Я храню некоторые файлы в своей базе данных, и, поскольку я храню их в двоичном формате и не храню никакой другой информации, я должен убедиться, что все они находятся в одном формате, чтобы я мог "обслуживать" "их позже (если есть способ просто вывести тип файла из массива байтов, сообщите об этом, но это не в фокусе здесь).
Итак, что мне нужно сделать, так это проверить каждый загружаемый файл, чтобы убедиться, что он имеет требуемый формат.
Я установил FieldTemplate с элементом управления FileUpload и CustomValidator:
<asp:FileUpload ID = "FileUpload" runat = "server" />
<asp:CustomValidator
ID = "CustomValidator1"
runat = "server"
ErrorMessage = "PDF only."
ControlToValidate = "FileUpload"
OnServerValidate = "CustomValidator1_ServerValidate">
</asp:CustomValidator>
Что мне не хватает, так это кода для размещения в этом методе CustomValidator1_ServerValidate, который проверяет загруженный файл, чтобы убедиться, что он находится в правильном формате (в данном случае PDF).
Заранее спасибо.





Используйте свойство FileUpload.PostedFile.ContentType для проверки типа MIME (должно быть application / pdf). По соображениям безопасности также проверьте, подходит ли расширение файла (.pdf). У вас может быть статическая хэш-таблица, содержащая сопоставления типа MIME с расширением (-ями) файла, и использовать ее в качестве поиска для проверки расширения.
FileUpload.PostedFile.ContentType был именно тем, что я искал.
Предупреждаем всех, кто пытается сделать то же самое: похоже, что типом MIME для файлов PDF может быть «application / pdf» или «text / pdf», поэтому обязательно проверьте оба варианта.
Пользователь может подделать это. В приведенном выше решении нет проверки фактического содержимого байтов. Я могу отправить вам исполняемый файл и замаскировать его под pdf, и он его не поймает.
Как и сказал арый. Все это можно подделать. Возьмите файл .txt, переименуйте его в файл pdf и попробуйте получить тип содержимого. Это будет «приложение \ pdf».
Однако есть одно решение, которое я использовал раньше. Во время моего краткого теста с файлами PDF я выяснил, что первые 3 байта всегда были одинаковыми. Я пробовал только первые 3 байта, потому что этого показалось достаточно. Значение первых трех байтов: 37, 80, 68.
Итак, я прочитал байты (InputFile1.FileContent.ReadByte ()), сравнил их с 3 байтами выше, и если они были одинаковыми, то у меня был файл PDF. Также я где-то читал, что вы должны отключить выполнение скрипта для каталога загрузки в IIS. Надеюсь, это поможет.
Есть ли по этому поводу официальная документация?