有没有办法使用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/