我正在导入Excel文档以便在UI中阅读和显示内容。我需要知道如何使用浏览获取上传文件的路径,以便读取excel文件的内容。
答案 0 :(得分:6)
我需要知道如何使用浏览获取上传文件的路径,以便读取excel文件的内容。
这里有一个重大的思维错误。
想象一下,我是想要上传文件的客户端,并且您是需要获取文件内容的服务器。我给你路径c:\path\to\foo.xls
作为唯一信息。您将如何 获取其内容?您是否有与本地硬盘文件系统的开放TCP / IP连接?真?是否所有其他人的本地磁盘文件系统都可以通过Internet轻松访问所有敏感信息?
这不是上传文件的方式。只有当服务器在与客户端在物理上相同的机器上运行时,这才会起作用,因此您只需将FileInputStream
与该路径一起使用(这只会出现在本地开发环境中)。
您应该对客户端与HTTP请求正文一起发送给您的唯一文件内容感兴趣。在HTML术语中,您可以使用<input type="file">
。但是在即将到来的JSF 2.2之前,没有相应的标准JSF <h:xxx>
组件。您需要查找为此提供组件的JSF组件库。在您的情况下,使用RichFaces(在您的问题中标记),您可以使用<rich:fileUpload>
。目前还不清楚您正在使用哪个RichFaces版本,但对于RF 3.3.3,您可以在3.3.3 showcase site和4.0 showcase site中的RF 4.0中找到完整的示例。
无论您选择哪种方式,您都应该在JSF托管bean中最终得到代表文件内容的byte[]
或InputStream
。然后,您可以自由地将它存储在服务器的本地磁盘文件系统中,例如使用FileOutputStream
。您甚至可以直接将其直接提供给您正在使用的任何Excel API,其中大多数只有InputStream
或byte[]
的方法。
答案 1 :(得分:2)
你最好看看这篇文章。 BalusC使用Tomahawk 2.0(http://myfaces.apache.org/tomahawk-project/tomahawk20/index.html)的解决方案很棒
你需要的一切都在那里
答案 2 :(得分:0)
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) {
}
}