java.io.FileNotFoundException InputStream上传的文件

时间:2017-01-10 13:45:02

标签: java inputstream vraptor

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

我已经工作了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>

我试图在Controller上添加更多代码,但是,我在“InputStream inp”的同一行得到了错误。

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

3 个答案:

答案 0 :(得分: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()仅在上传人员的计算机上引用上传文件的“简单名称”。您只应将该值用于显示目的。

答案 1 :(得分:0)

最有可能的,因为您实际上没有磁盘上的文件,而是UploadedFile对象。尝试使用

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

因为应该为您提供一个可以使用的InputStream。

答案 2 :(得分:0)

我发现了发生了什么。

没有必要将UploadedFile抛出到InputStream中。将UploadFile直接放入工作簿对象是可能的,也是必要的。

因此,Controller代码如下:

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();
    }
}

非常感谢,伙计们!!!