2011-12-18 22 views
1

アップロードされるファイルがExcel形式であるかどうかを確認する方法はありますか?私はApache POIライブラリを使用してExcelを読み込み、ファイルを読み込んでいる間にアップロードされたファイル拡張子をチェックしています。延長検証:アップロードされるファイルがExcel形式であるかどうかを確認する方法は? - Apache POI

String suffix = FilenameUtils.getExtension(uploadedFile.getName()); 

に礼儀BalusC : uploading-files-with-jsf私は確信している

String fileExtension = FilenameUtils.getExtension(uploadedFile.getName()); 
if ("xls".equals(fileExtension)) { 
//rest of the code 
} 

を取得するための

コードスニペットは、この検証の適切な方法ではありません。アップロードボタンのブラウズボタンの

サンプルコード

<h:inputFileUpload id="file" value="#{sampleInterface.uploadedFile}" 
     valueChangeListener="#{sampleInterface.uploadedFile}" /> 

サンプルコード

<h:commandButton action="#{sampleInterface.sampleMethod}" id="upload" 
value="upload"/> 

ユーザーは「XLS」およびアップロードするためにドキュメントの拡張子やムービーファイルを変更することができます、ファイルを読み込んでいる間に例外がスローされます。

誰かが何らかの入力を自分のやり方で投げてくれることを期待しています。

+0

どの程度の検証が必要ですか?誰かがcsvをアップロードしていないことを確認するだけで十分ですか?別のオフィスファイル(例:.ppt)をアップロードしていないことを知るには十分ですか?またはそれはエラーなしでロードすることができることを知るのに十分です(切り捨てられないなど)? – Gagravarr

+0

はい、この種のシナリオの大部分です。 –

+0

これらのすべてをチェックしたい場合は、BalusCの言う通り、POIで開き、間違った形式の例外をキャッチしてみてください。 (ほんの一種の単純なチェックをしたければ他のオプションもあります) – Gagravarr

答えて

4

POIに送る前にチェックすることはできません。 POIが解析中に投げることができる例外を捕捉するだけです。例外がスローされた場合、アップロードされたファイルがサポートされているExcel形式ではないことをエンドユーザに表示することができます(FacesMessage)。

+0

こんにちはBalusC、応答ありがとう、それは動作しましたが、そのメソッドを投げても例外が見つかりませんでした。メソッドは非常によく定義されていますが、依然としてその例外をスローしています リンク - > http://stackoverflow.com/questions/8593058/exception-jsf –

+0

あなたはどんな例外について話していますか?スタックトレースを表示します。 – BalusC

+0

待ち、 'valueChangeListener'と' value'属性は同じEL式です!これは全く意味をなさない。私はあなたが実際に 'valueChangeListener'を必要としないと思います。それを取り除く。 – BalusC

0

ポスターにもっと役立つようにしてください。もちろん、あなたはpoiの前にテストすることができます。 try/catchの前に実行される定期的なテストには、以下が含まれます。私は、フェイル・ファースト・アプローチを提案します。

  1. "いい"ファイルですか?

    1. if file.isDirectory() - > die and exit。
    2. if!file.isReadable() - > dieして終了します。
    3. 場合file.available < = 100 - >死ぬと終了はfile.sizeが> =いくつかのばかげた多数
    4. 場合(ファイルサイズがゼロ含み)(チェックをあなたの最大のExcelファイルと10を掛ける)
  2. ファイルはよく見えますが、Excelのような内容ですか?

    1. "ÐÏà" - で始まらない場合は、死ぬでしょうか。
    2. 「シート」のテキストが含まれていますか?そうでない場合は、die
    3. ここで皆さんから期待していたいくつかの内部エクセルバイト。
+3

あなたがそこに言及した定期的なテストは、**アップロードされたファイルには絶対に意味がありません**。これは常にディレクトリではなく、常に読み取り可能で常に「利用可能」です。通常、ファイルサイズはアップローダ設定で設定されます(ユーザーは最大10MBほどアップロードできます)。これらのテストは、おそらくローカルのディスクファイルシステムのポインタで意味をなさないでしょうが、これはこの特定の質問ではまったく当てはまりません。ところで、あなたは 'available()'がしていることを誤解しています(心配しなくても、ほとんどの初心者はそれを理解しませんでした)。さらに、あなたのコンテンツテストは全く意味をなさない。これらはビジネス固有の要件です。 – BalusC

+0

@BalusCどのように利用可能な()を使用するのですか?また、アップローダの設定はどのように設定されますか? –

+0

javadocの意味をお読みください。あなたがそれを理解していない場合、それを使用しないでください。あなたはアップロードされたファイルを書くのにそれを必要としません。 – BalusC

関連する問題