使用HttpPostedFileBase验证格式视频文件



有没有办法使用HttpPostedFileBase元素来确定它是否是有效的视频文件格式(验证扩展名除外)。顺便说一下,我正在使用aspnetmvc 3。

如果您想绝对确定,最好检查HttpPostedFileBase的流中是否有神奇的字节。这是因为有些应用程序可能会将其编写为您认为可以处理的扩展(如MP4),但实际上它是另一种格式,如M4V。

例如,要检查流是否是MP4变体流,可以检查流是否以字节0x00、0x00、0x0、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; }
}

但我会让你做进一步的调查。

没有验证的方法。您需要验证文件的扩展名。也许这会有所帮助:http://blog.tomasjansson.com/2011/08/creating-custom-unobtrusive-file-extension-validation-in-asp-net-mvc-3-and-jquery/

最新更新