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

时间:2011-12-30 12:19:01

标签: java mime-types

我正在使用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文件。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

答案 1 :(得分:1)

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

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