如何在JSF中获取上传的文件路径

时间:2012-09-07 07:55:59

标签: jsf file-upload richfaces

我正在导入Excel文档以便在UI中阅读和显示内容。我需要知道如何使用浏览获取上传文件的路径,以便读取excel文件的内容。

3 个答案:

答案 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 site4.0 showcase site中的RF 4.0中找到完整的示例。

无论您选择哪种方式,您都应该在JSF托管bean中最终得到代表文件内容的byte[]InputStream。然后,您可以自由地将它存储在服务器的本地磁盘文件系统中,例如使用FileOutputStream。您甚至可以直接将其直接提供给您正在使用的任何Excel API,其中大多数只有InputStreambyte[]的方法。

答案 1 :(得分:2)

你最好看看这篇文章。 BalusC使用Tomahawk 2.0(http://myfaces.apache.org/tomahawk-project/tomahawk20/index.html)的解决方案很棒

JSF 2.0 File upload

你需要的一切都在那里

答案 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) {

    }

}