0

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

4

3 回答 3

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 展示站点中找到完整示例,对于 RF 4.0,您可以在4.0 展示站点中找到。

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

于 2012-09-07T11:58:30.110 回答
2

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

JSF 2.0 文件上传

你需要的一切都在那里

于 2012-09-07T08:05:29.297 回答
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) {

    }

}   
于 2012-11-15T13:18:26.470 回答