为什么我使用JMimeMagic lib获取CSV文件的mimetype text / plain?

问题描述 投票:2回答:2

我正在使用JMimeMagic lib来验证CSV文件上传。

对于CSV和其他所有文本文件(txt,JSP等),它为我提供text / plain mime类型。

logger.debug("Checking magic content");
MagicMatch match;
match = Magic.getMagicMatch(getPromotionOptIn().getUpload(),false);
logger.debug("Actual file mimetype=" + match.getMimeType());

我不应该获得CSV文件的text / csv吗? (See所有mime类型列表)。

或者它很好,我把我的验证放在text / plain上认为它是一个有效的CSV文件。

java mime-types
2个回答
2
投票

由于CSV文件可以有多个不同的分隔符,我怀疑csv文件只是被识别为文本文件(这是真的)。

如果您看到文本文件,您如何确定它是CSV文件?如果文中有逗号,半冒号等?如果那些属于一个条目而分隔符是其他东西(如|,#,@等)会怎么样?

如果没有更多信息,你肯定会遇到困难,JMimeMagic会遇到同样的问题。因此,它只返回它确定的内容:文件是文本文件。因此,你“只”获得“文本/普通”。

我不知道那个库,但从文档/来源看起来你可以给出一个提示,*.csv文件使用text/csvMagic.addHint("csv", someMatcher) mime类型。请注意,您可能必须为第二个参数传递true,否则这些提示可能会被忽略(从查看源代码看起来如此)。

这仍然取决于文件扩展名是否正确,即如果有人上传了包含其他内容的.csv文件,您将获得错误的mime类型。

然而,似乎JMimeMagic不会做很多内容检查。至少我在sourceforge / github找到的来源中找不到多少。只有一个文本文件检测器,因此您可能必须为其他mime类型和文件格式添加自己的内容检测器。


1
投票

我的猜测是JMimeMagic使用文件的前几个字节来确定类型。这可用于许多不同的文件类型,因为它们具有非常标准的标头。一些文本文件,如HTML,将在开头附近的某个地方放置文本<html,从而可以很好地猜测它是什么类型的文件。

CSV文件无法进行此类推断。他们没有标准标题。很难以编程方式告知购物清单中的CSV文件,其中包含逗号。它确实为您提供了text / plain的正确答案,因为所有CSV文件都是。

© www.soinside.com 2019 - 2024. All rights reserved.