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

时间:2014-07-17 16:13:43

标签: c# memorystream

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

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

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

所以这引出了我的问题,是否有可能找出文件在MemoryStream中的文件类型/扩展名?

3 个答案:

答案 0 :(得分:2)

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

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

This post on Super User可能很有用,他们讨论了根据内容检测文件类型。

答案 1 :(得分:1)

不可以扩展,你可以猜测类型:

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

您可以尝试通过阅读流的部分/全部内容来检测文件的类型(许多格式在开头有magic number / signature)。

还有一些类似的问题,例如Using .NET, how can you find the mime type of a file based on the file signature not the extension(讨论使用UrlMon来检测类型)。

答案 2 :(得分:1)

不,MemoryStream不知道或关心其字节来自何处。

您可以从前几个字节猜测文件格式。我确定网上有可用的代码来执行此操作。

或者,只需让服务的来电者传输此信息即可。