根据输入流检查上传的文件是否为视频



我在c#中有一个web表单应用程序,我必须检查文件类型是否基于它的输入流。

我已经尝试了几种方法,包括:

protected void btnUpload_Click(object sender, EventArgs e)
{
if (FileUpload1.PostedFile != null)
{
try
{
string FileName = Path.GetFileName(FileUpload1.PostedFile.FileName);
if (FileUpload1.PostedFile.InputStream.Length <= 0)
txt_response.Text = "Invalid file.";
byte[] buffer = new byte[256];
Stream fs = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(fs);
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
System.UInt32 mimetype;
FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
//mime of video file remains application/octet-stream
}
catch (Exception ex)
{
throw ex;
}
}
}
[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(System.UInt32 pBC, [MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, System.UInt32 cbSize, 
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed, System.UInt32 dwMimeFlags, out System.UInt32 ppwzMimeOut, System.UInt32 dwReserverd);
}

以上代码适用于大多数文件类型,但对于视频,它返回application/ococate -stream,尽管视频是mp4。

是否有任何方法我们可以检查缓冲区,并决定它是视频文件或图像文件等?

任何帮助都将非常感激。谢谢!

您是否检查了MetadataExtractor库?我用它来检查输入文件是否为MP4在我的应用程序:

var fileType = FileTypeDetector.DetectFileType(fileStream);
IsVideoFileFormatValid = fileType == FileType.Mp4;

请看他们的文档。

免责声明:我与该项目没有任何关系。

最新更新