java - jsp+springMVC实现文件下载的时候后台抛出getOutputStream()异常
迷茫
迷茫 2017-04-18 10:53:58
0
1
554

使用JSP+springMVC框架做的web平台,在做文件下载的时候,遇到这样的问题:

文件下载部分的代码是这样写的:

@RequestMapping("/ModelDownload{id}")
public String ModelDownLoad(@PathVariable int id, HttpServletResponse response){
    String fileName = "download.txt"; 
    String filePath = "D:\\";
    String modelName = new ModelService().getModelById(id).getModelName();
    System.out.println(modelName);
    response.reset();
    response.setContentType("application/x-download");
    response.addHeader("Content-Disposition", "attachment;filename="+fileName);//重新设置响应头文件字段,设置下载文件的文件名
    OutputStream OutputStream = null;
    FileInputStream fileInputStream = null;
    try {
        OutputStream = response.getOutputStream();
        fileInputStream = new FileInputStream(filePath+fileName);
        byte[] buffer = new byte[1024*10];//设置文件大小上限为10M
        for (int read; (read = fileInputStream.read(buffer)) != -1;){
            OutputStream.write(buffer,0,read);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        System.out.println(e.toString());
    }
    finally{
        try {
            fileInputStream.close();
            OutputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return "success";
}

百度了很多,几乎都是说在JSP上使用out对象进行clear()和close()操作的,根本没有针对后台操作遇到的相同问题的解决方案,求大神指导。

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

répondre à tous(1)
洪涛

Solution du problème : changez simplement le type de retour de la méthode en void.
La raison du problème peut être que lorsque le type de retour est String, cliquez sur le bouton de téléchargement et la page de téléchargement apparaîtra à ce moment-là. , le code d'arrière-plan est interrompu et il n'y a pas de Just close();

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal