2011-12-30 2 views
2

私はJMimeMagicのlibを使用してCSVファイルのアップロードを検証しています。JMimeMagic libを使用してCSVファイル用のmimetype text/plainを取得しているのはなぜですか?

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タイプのリスト)。

また、有効なCSVファイルを考えてテキスト/プレーンに妥当性を確認しても問題ありません。

答えて

2

CSVファイルには複数の区切り記号を付けることができるため、csvファイルはテキストファイルとして認識されていると思われます(これは真です)。

テキストファイルが表示された場合は、そのファイルがCSVファイルであることをどのように知っていますか?テキストにカンマ、セミコロンなどがある場合は?それらがエントリに属し、セパレータが何か他のもの(例えば、|、#、@など)であればどうでしょうか?

JMimeMagicは同じ問題を抱えています。したがって、それは確かなことだけを返します:ファイルはテキストファイルです。したがって、あなたは「テキスト/プレーン」を「唯一」得る。

私はそのライブラリは分かりませんが、ドキュメント/ソースから、 を使用してファイルを持っているというヒントが得られたようです。 2番目のパラメータにはtrueを渡す必要があります。そうしないと、ヒントが無視される可能性があります。

これはファイル拡張子に依然として左右されます。つまり、他のものが含まれている.csvファイルをアップロードした場合、間違ったMIMEタイプが発生します。

しかし、JMimeMagicはとにかく多くのコンテンツチェックをしないようです。少なくとも私はsourceforge/githubで見つけたソースではあまり見つけられませんでした。テキストファイル検出器しかないので、他のMIMEタイプやファイルフォーマット用の独自のコンテンツディテクタを追加する必要があります。

+0

Java Mime Magicはパフォーマンス面で優れていますか?つまり、ファイル全体をメモリに保持せず、ヘッダや初期の内容だけを読み込んで結果を出すのではないという意味ですか?私がヒントを与えていない場合は、2番目のパラメータに** false **を渡してもよろしいですか?ありがとう。 –

+0

@Tahirパフォーマンスについてはわかりませんが、読み込まれるファイルの部分はフォーマットに依存していると思います。私はそこにテキスト以外の文字があるかどうかを見るためにコンテンツ全体を読むように見えるテキストファイル検出器しか見ることができませんでした。画像のような他のフォーマットの場合は、独自の検出器を用意してヘッダーのみを読む必要があります。あなたはまた、拡張機能に頼ることもできます。ソース/ドキュメントを確認してください。私は自分自身でそのライブラリを使用しているわけではありません。ソースよりも多くの情報を提供することはできません。 – Thomas

+0

@Tahir 2番目のパラメータに関して: 'false'を渡すとヒントが無視されるように見えるので、追加のヒントを与えなければ実際には問題にはならないでしょう。 – Thomas

1

私の推測では、JMimeMagicはファイルの最初の数バイトを使用して型を判別すると思います。非常に標準的なヘッダーを持つので、これは多くの異なるファイルタイプで可能です。 HTMLのような一部のテキストファイルは、テキストの先頭に近いところに<htmlという文字列があるため、そのファイルの種類についてはよく分かります。

この種の控除はCSVファイルではできません。標準ヘッダーはありません。 CSVファイルをカンマで区切ってショッピングリストからプログラムで呼び出すことは難しいです。これは、すべてのCSVファイルと同様に、text/plainの正解を返します。

関連する問題