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