2017-01-10 77 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

如果有人已經給出了正確的答案,回答自己的問題並不常見。您應該通過點擊答案旁邊的灰色複選標記來標記正確的答案。 –

相關問題