是否可以从加载到MemoryStream的文件中获取文件扩展名或类型?
本文关键字:文件 获取 扩展名 类型 加载 MemoryStream 是否 | 更新日期: 2023-09-27 18:13:33
我正在用c#创建一个服务,该服务将由ASP使用。. Net Web API,用于处理和存储文件。
作为Web API的一部分,我获取文件并将它们存储在MemoryStream
中,然后将其传递给服务进行实际处理和存储。
服务的一部分将是为每个文件生成一个新的文件名。
所以这让我的问题,是有可能找出什么文件类型/扩展名的文件是现在,它在内存流?
不允许扩展,您可以猜测类型:
除非文件内容以某种方式包含名称/扩展名,否则MemoryStream
本身不包含任何有关原始文件名的信息。
你可以尝试通过读取流的部分/全部内容来检测文件的类型(例如,许多格式在开头都有神奇的数字/签名)。
还有几个类似的问题,如使用。net,如何根据文件签名而不是扩展名找到文件的mime类型(讨论使用UrlMon来检测类型)。
您必须检查数据,并根据您希望处理的内容类型的特征查看它是什么内容类型。更好的解决方案是在加载文件时捕获该信息,并将其作为过程的一部分传递。
要获取该信息,要么假设文件扩展名告诉您它是什么类型,要么让用户(或调用代码)从有效的文件类型列表中选择。
这个帖子在超级用户可能是有用的,他们讨论检测基于内容的文件类型
不,MemoryStream
不知道或关心它的字节来自哪里。
您可以从前几个字节猜出文件格式。我相信网上有代码可以做到这一点。
或者,让服务的调用者传递此信息