2017-01-10 49 views
0

我一直在开发一个读取Excel文件并将其数据输入到数据库的函数。 Excel文件由最终用户在输入文件(HTML)中选择。当我点击提交按钮时,控制器(Java)会正常接收文件名,但是当我尝试将上传的文件放入InputStream以读取文件数据并对其进行处理时,我得到以下异常: “java .io.FileNotFoundException:“文件名”(O sistemanãopode encontrar o caminho especificado)“java.io.FileNotFoundException InputStream已上传的文件

我一直在为它工作3天,直到现在,我没有在谷歌的答案。

控制器方法代码

@Post 
public void pegaArquivoMetas(HttpSession session, UploadedFile planilha) throws IOException, BiffException { 
    InputStream inp = new FileInputStream(planilha.getFileName()); 
    try{ 
     Workbook workbook = Workbook.getWorkbook(inp); 
    }catch(BiffException e){ 
     e.printStackTrace(); 
    } 
} 

JSP表单代码

<form enctype="multipart/form-data" method="post" action="${linkTo[MonitorController].pegaArquivoMetas}" > 
     <div class="col-lg-6"> 
      <label for="txtArquivo"></label> 
      <input type="file" accept=".xls,.xlsx" name="planilha" class="form-control" id="txtArquivo" /> 
     </div> 

     <div class="col-lg-2"> 
      <label for="btnAtualizar"></label> 
      <button type="submit" id="btnAtualizar" class="btn btn-success btn-block disabled"><i class="fa fa-refresh"></i> Atualizar</button> 
     </div> 
</form> 

我试图把更多的代码在控制器,但是,我在同一条线“的InputStream INP”的得到了错误。

如果你们需要更多的信息,请不要犹豫,问。

回答

0

一点猜测在这里,因为我没有做太多与vraptor,但假设你使用这个接口: https://github.com/caelum/vraptor/blob/master/vraptor-core/src/main/java/br/com/caelum/vraptor/interceptor/multipart/UploadedFile.java

那么你应该使用planilha.getFile()直接拿到InputStreamgetFileName()仅指上传人的计算机上传文件的“简单名称”。您只能将该值用于显示目的。

+0

Yeah Florian,我正在使用这个接口,我试图把planilha.getFile()放到InputStream中,那就是问题所在。 当我们使用multipart/form-data的时候,我们不需要在本地目录中创建文件,导致文件已经存在于内存中,这就是我正在尝试做的事情...... – Felipe

0

最有可能的,因为你实际上没有一个文件在磁盘上,但一个UploadedFile对象。尝试使用

try (InputStream is = planilha.getInputStream()) { 
    Workbook workbook = Workbook.getWorkbook(inp); 
} catch (BiffException e) { 
    e.printStackTrace(); 
} 

,因为这应该给你一个InputStream一起工作。

0

我发现了怎么回事。

没有必要将UploadedFile放入InputStream。这是可能的,并且需要直接将UploadFile放入工作簿对象中。

如此,控制器代码如下:

public void pegaArquivoMetas(HttpSession session, UploadedFile planilha) throws IOException, BiffException { 
    Workbook wb; 
    try{ 
     wb = Workbook.getWorkbook(planilha.getFile()); 
     Sheet sh = wb.getSheet(0); 
     int linhas = sh.getRows(); 
    }catch (BiffException e) { 
     e.printStackTrace(); 
    } 
} 

非常感谢你,伙计们!

+0

如果有人已经给出了正确的答案,回答自己的问题并不常见。您应该通过点击答案旁边的灰色复选标记来标记正确的答案。 –

相关问题