gpt4 book ai didi

asp.net-mvc - 在C#中,如何从byte[]得知文件类型?

转载 作者:行者123 更新时间:2023-12-01 18:56:31 25 4
gpt4 key购买 nike

我有一个从上传的文件填充的字节数组。但是,在代码的另一部分,我需要知道从 byte[] 上传的文件类型,以便我可以向浏览器呈现正确的内容类型!

谢谢!!

最佳答案

如前所述,MIME 魔法是实现此目的的唯一方法。许多平台提供了最新且强大的 MIME 魔术文件和代码来高效地完成此操作。在 .NET 中无需任何第 3 方代码即可执行此操作的唯一方法是使用 urlmon.dll 中的 FindMimeFromData。方法如下:

public static int MimeSampleSize = 256;

public static string DefaultMimeType = "application/octet-stream";

[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static uint FindMimeFromData(
uint pBC,
[MarshalAs(UnmanagedType.LPStr)] string pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
uint cbSize,
[MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed,
uint dwMimeFlags,
out uint ppwzMimeOut,
uint dwReserverd
);

public static string GetMimeFromBytes(byte[] data) {
try {
uint mimeType;
FindMimeFromData(0, null, data, (uint)MimeSampleSize, null, 0, out mimeType, 0);

var mimePointer = new IntPtr(mimeType);
var mime = Marshal.PtrToStringUni(mimePointer);
Marshal.FreeCoTaskMem(mimePointer);

return mime ?? DefaultMimeType;
}
catch {
return DefaultMimeType;
}
}

这使用 Internet Explorer MIME 检测器。这与 IE 用来发送 MIME 类型和上传文件的代码相同。你可以看到list of MIME types supported by urlmon.dll 。需要注意的一件事是 image/pjpegimage/x-png 它们是非标准的。在我的代码中,我将它们替换为 image/jpegimage/png

关于asp.net-mvc - 在C#中,如何从byte[]得知文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com