如何设置响应 header

How the response header is set

为什么在 filenotfound 异常后设置响应 header。 从技术上讲,header 仅在获取文件后设置。

try {
    //codes 
    File file = new File(zipDestinationPath);               
    response.setContentType(new MimetypesFileTypeMap().getContentType(file));
    response.setContentLength((int)file.length());
    response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
    is = new FileInputStream(file);
    FileCopyUtils.copy(is, response.getOutputStream());

}  catch(FileNotFoundException e){
    System.out.println("File Not Found.");
    ServletOutputStream out = null;
    try {
        //i am not setting header here commentedit.
        // response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode("Error", "UTF-8"));
        response.setContentType("text/plain;charset=ISO-8859-15");
        out = response.getOutputStream();
        System.out.println(("Invalid file path :" +zipDestinationPath).getBytes());
        out.write(("Invalid file path :" +zipDestinationPath).getBytes());
        out.flush();
        out.close();
    } catch (IOException e2) {
        e2.printStackTrace();
    }
}
catch (Exception e) {
    e.printStackTrace();
}

创建 File 不会抛出 FileNotFoundExceptionFileNotFoundException 仅在您创建 FileInputStream 时抛出,此时您已经设置了 headers。尝试重新排列它

           File file = new File(zipDestinationPath);               
            is = new FileInputStream(file);
            response.setContentType(new MimetypesFileTypeMap().getContentType(file));
            response.setContentLength((int)file.length());
            response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));