是否可以从加载到MemoryStream的文件中获取文件扩展名或类型?

本文关键字:文件 获取 扩展名 类型 加载 MemoryStream 是否 | 更新日期: 2023-09-27 18:13:33

我正在用c#创建一个服务,该服务将由ASP使用。. Net Web API,用于处理和存储文件。

作为Web API的一部分,我获取文件并将它们存储在MemoryStream中,然后将其传递给服务进行实际处理和存储。

服务的一部分将是为每个文件生成一个新的文件名。

所以这让我的问题,是有可能找出什么文件类型/扩展名的文件是现在,它在内存流?

是否可以从加载到MemoryStream的文件中获取文件扩展名或类型?

不允许扩展,您可以猜测类型:

除非文件内容以某种方式包含名称/扩展名,否则MemoryStream本身不包含任何有关原始文件名的信息。

你可以尝试通过读取流的部分/全部内容来检测文件的类型(例如,许多格式在开头都有神奇的数字/签名)。

还有几个类似的问题,如使用。net,如何根据文件签名而不是扩展名找到文件的mime类型(讨论使用UrlMon来检测类型)。

您必须检查数据,并根据您希望处理的内容类型的特征查看它是什么内容类型。更好的解决方案是在加载文件时捕获该信息,并将其作为过程的一部分传递。

要获取该信息,要么假设文件扩展名告诉您它是什么类型,要么让用户(或调用代码)从有效的文件类型列表中选择。

这个帖子在超级用户可能是有用的,他们讨论检测基于内容的文件类型

不,MemoryStream不知道或关心它的字节来自哪里。

您可以从前几个字节猜出文件格式。我相信网上有代码可以做到这一点。

或者,让服务的调用者传递此信息