有没有办法使用HttpPostedFileBase元素来查明它是否是一个有效的视频文件fomart(验证扩展名除外)。我顺便使用aspnet mvc 3。
答案 0 :(得分:0)
无法验证。您需要验证文件的扩展名。也许这会有所帮助:http://blog.tomasjansson.com/2011/08/creating-custom-unobtrusive-file-extension-validation-in-asp-net-mvc-3-and-jquery/
答案 1 :(得分:0)
如果您想绝对确定,最好检查HttpPostedFileBase
的流以查找魔术字节。这是因为某些应用程序可能会将其编写为您认为可以处理的扩展(例如MP4),但实际上它是另一种格式,例如M4V。
例如,要检查流是否是MP4变体流,您可以检查流是否以字节0x00,0x00,0x00,0x20,0x66,0x74,0x79,0x70,0x6D,0x70和0x34开头。您可以找到更多格式here。
这样的事情可能有用:
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; }
}
但我会留给你进一步调查。