2016-11-29 17 views
-1

如何从c#中的byte []或Base64String获取内容类型(MIME类型)? (Asp.Net Core)从C#中的字节[]获取内容类型

我的web api正在接收在JSON对象内发送的文件。该文件在Base64String中编码。我的第一步是将这个base64string转换为一个字节数组,然后执行验证。其中一个验证是检查它是否是有效的文件。为此,我需要检查其内容类型。

private bool validateContent (byte[] content) { 
    //Get mime content type from content 
} 
+6

很容易被欺骗'内容Type'应作为发送一个头。它不会在数据本身。你的JSON对象是什么样的? –

+1

@DanWilson:我认为他希望从任何以字节形式发送的数据(即,像excel xlsx,xls,图像这样的二进制文件并且不信任客户端发送什么等)获得mimetype,即客户端通常发送压缩文件作为'application/octet-stream',就像一些邮件客户端,它什么都不知道它真的是什么类型) – Tseng

+0

我知道,我说这是不可能从字节流单独的,除非你想扫描文件类型标记在数据,这是不可靠的和容易出错的。 http://stackoverflow.com/questions/1654846/in-c-how-can-i-know-the-file-type-from-a-byte –

回答

1

只需检查文件签名(幻数),例如HEX或ASCII就可以了。签名的列表,你可以在https://en.wikipedia.org/wiki/List_of_file_signatureshttp://www.garykessler.net/library/file_sigs.html

发现不信任请求头Content-Type,因为它可以通过用户

+1

文件签名也可能被欺骗。当然,文件扩展名也是如此。没有安全的方法。 – poke

+0

当然,但如果你欺骗文件签名/扩展名文件可能会被解释器误读,并且finnaly没有执行。欺骗请求头Content-Type要危险得多。半安全将是chceck文件签名和扩展 –