проверка формата видеофайла с помощью HttpPostedFileBase - PullRequest
0 голосов
/ 23 марта 2012

Есть ли способ использовать элементы HttpPostedFileBase, чтобы выяснить, является ли это действительный видеофайл fomart (кроме проверки расширения).Кстати, я использую aspnet mvc 3.

Ответы [ 2 ]

0 голосов
/ 24 марта 2012

Если вы хотите быть абсолютно уверенным, лучше всего проверить поток HttpPostedFileBase на наличие магических байтов. Это связано с тем, что некоторые приложения могут записывать его как расширение, которое, как вы думаете, вы можете обрабатывать (например, MP4), но на самом деле это другой формат, такой как M4V.

Например, чтобы проверить, является ли поток потоком изменения MP4, вы можете проверить, начинается ли поток с байтов 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70 и 0x34. Вы можете найти больше форматов здесь .

Примерно так может работать:

public static bool IsMP4(System.IO.Stream stream)
{
    return HasMagicBytes(stream, 0, 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34);
}

public static bool HasMagicBytes (System.IO.Stream stream, int offset, params byte[] magicBytes)
{
    try {
        bool match = false;
        byte[] bytes = new byte[magicBytes.Length];
        if (stream.Read (bytes, offset, magicBytes.Length) == magicBytes.Length) {
            for (int i = 0; i < magicBytes.Length; i++) {
                if (bytes [i] != magicBytes [i]) {
                    return false;
                }
            }   
            return true;
        } else {
            return false;
        }

    } finally {
        stream.Seek (0, System.IO.SeekOrigin.Begin);
    }

}

Следует позаботиться о том, чтобы поток был доступен для поиска. Этот метод довольно эффективен для больших файлов. Чтобы сделать это повторно используемым, вы можете написать ValidationAttribute, чтобы можно было определить вашу модель следующим образом:

public class MyModel
{
    [CheckFormat(0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x6D, 0x70, 0x34)]
    public HttpPostedFileBase MyFile { get; set; }
}

Но я оставлю это вам для дальнейшего расследования.

0 голосов
/ 23 марта 2012

Нет способа проверить.Вам необходимо подтвердить расширение файла.Может быть, это поможет: http://blog.tomasjansson.com/2011/08/creating-custom-unobtrusive-file-extension-validation-in-asp-net-mvc-3-and-jquery/

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