UIでコンテンツを読み取って表示するためにExcelドキュメントをインポートしています。Excelファイルの内容を読み取るには、ブラウズを使用してアップロードされたファイルのパスを取得する方法を知る必要があります。
3 に答える
Excelファイルの内容を読み取るために、参照を使用してアップロードされたファイルのパスを取得する方法を知る必要があります。
ここに重大な思考ミスがあります。
私がファイルをアップロードしたいクライアントであり、あなたがファイルのコンテンツを取得する必要があるサーバーであると想像してください。c:\path\to\foo.xls
唯一の情報としてパスを提供します。サーバーとしてコンテンツを取得するにはどうすればよいでしょうか? ローカル ハードディスク ファイル システムへのオープンな TCP/IP 接続はありますか? 本当に?機密情報がすべて保存されている他のユーザーのローカル ディスク ファイル システムは、インターネット経由で簡単にアクセスできるのでしょうか。
それはファイルのアップロードの仕組みではありません。これは、サーバーがクライアントと物理的に同じマシンで実行されている場合にのみ機能するためFileInputStream
、そのパスで使用できます (ローカル開発環境でのみ発生します)。
代わりに、クライアントが HTTP 要求本文とともに送信したファイルの内容だけに関心があるはずです。HTML 用語では、これに使用できます<input type="file">
。しかし、今後の JSF 2.2 までは、これに相当する標準 JSF<h:xxx>
コンポーネントはありません。このためのコンポーネントを提供する JSF コンポーネント ライブラリを探す必要があります。あなたの場合、RichFaces(質問でタグ付けされているように)を使用すると、これを使用できます<rich:fileUpload>
。使用している RichFaces のバージョンは不明ですが、RF 3.3.3 の場合は3.3.3 ショーケース サイトで、RF 4.0 の場合は4.0 ショーケース サイトで完全な例を見つけることができます。
どちらの方法を選択しても、最終的には JSF マネージド Beanでファイルの内容を表すbyte[]
またはになるはずです。InputStream
次に、たとえば を使用して、サーバーのローカル ディスク ファイル システム上の任意の場所に自由に保存できますFileOutputStream
。また、使用している Excel API に直接フィードすることもできます。ほとんどの API には、InputStream
orを取るメソッドしかありませんbyte[]
。
この記事を見たほうがいいです。BalusC によるTomahawk 2.0 ( http://myfaces.apache.org/tomahawk-project/tomahawk20/index.html ) を使用するソリューションは素晴らしいです
必要なものはすべてそろっています
String fileName = FilenameUtils.getName(uploadedFile.getName());
byte[] bytes = uploadedFile.getBytes();
FileOutputStream outputStream = null;
try {
String filePath = System.getProperty("java.io.tmpdir") + "" + fileName;
outputStream = new FileOutputStream(new File(filePath));
outputStream.write(bytes);
outputStream.close();
readExcelFile(filePath);
} catch (Exception ex) {
}
In the above code Iam uploading the file using tomahawk after uploading storing the file in a temporary location.And from there i will be reading using poi.
public static void readExcelFile(String fileName)
{
try{
FileInputStream myInput = new FileInputStream(fileName);
POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
org.apache.poi.ss.usermodel.Workbook workbook = WorkbookFactory.create(myFileSystem);
org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);
Iterator rowIter = sheet.rowIterator();
for(Row row : sheet) {
//u can read the file contents by iterating.
}
} catch (Exception ex) {
}
}