Почему я получаю mimetype text / plain для CSV-файла, используя JMimeMagic lib? - PullRequest
2 голосов
/ 30 декабря 2011

Я использую JMimeMagic lib для проверки загрузки CSV-файла.

Для CSV и любого другого текстового файла (txt, JSP и т. Д.) Он дает мне текстовый / обычный MIME-тип.

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

Разве я не должен получить текст / CSV для CSV-файла?( См. весь список типов пантомимы).

Или это нормально, что я поставил свою проверку в текстовом / обычном виде, считая его действительным CSV-файлом.

Ответы [ 2 ]

2 голосов
/ 30 декабря 2011

Поскольку CSV-файлы могут иметь несколько различных разделителей, я подозреваю, что CSV-файл просто распознается как текстовый файл (это правда).

Если вы видите текстовый файл, как вы точно знаете, что этоCSV файл?Если в тексте есть запятые, точки с запятой и т. Д.?Что, если они принадлежат какой-либо записи, а разделитель - это что-то еще (например, |, #, @ и т.,Таким образом, он вернет только то, в чем он уверен: файл является текстовым файлом.Таким образом, вы «только» получаете «text / plain».

Я не знаю эту библиотеку, но из документации / источника кажется, что вы могли бы дать подсказку, что *.csv файлы имеют тип text/csv mimeиспользуя Magic.addHint("csv", someMatcher).Обратите внимание, что вам, возможно, придется передать true для вторых параметров, так как в противном случае эти подсказки могут быть проигнорированы (кажется, при просмотре источников).

Это все равно будет зависеть от правильности расширения файла, т.е.если кто-то загрузил файл .csv, который содержит что-то еще, вы получите неправильный тип MIME.

Однако, похоже, что JMimeMagic в любом случае не будет выполнять проверку содержимого.По крайней мере, я не нашел много в источниках, которые я нашел в sourceforge / github.Есть только детектор текстовых файлов, поэтому вам, возможно, придется добавить свои собственные детекторы контента для других типов mime и форматов файлов.

1 голос
/ 30 декабря 2011

Я предполагаю, что JMimeMagic использует первые несколько байтов файла для определения типа. Это возможно для многих типов файлов, так как они имеют очень стандартные заголовки. Некоторые текстовые файлы, такие как HTML, будут иметь текст <html где-то рядом с началом, что даст вам точное представление о том, какой это тип файла.

Этот вид удержания невозможен для файлов CSV. У них нет стандартных заголовков. Трудно программно отличить CSV-файл от списка покупок с запятыми в нем. Это дает вам правильный ответ текст / простой, как все файлы CSV.

...