我面临500内部服务器错误:对该文件的访问被拒绝

时间:2019-01-01 00:05:27

标签: java spring-boot

我写了一个代码使用springboot打印excel表格。我收到500个服务器错误,提示对文件的访问被拒绝

    @RequestMapping(value = "/downloadReport", method = RequestMethod.GET)
public ResponseEntity<InputStreamResource> downloadReport(@RequestParam(value = "employeeName", required = false) String employeeName,
        @RequestParam(value = "empId",required = false) Integer empId,@RequestParam(value = "skillMasters",required = false) Integer skillMasters,@RequestParam(value = "projects",required = false) List<String> projects,@RequestParam(value = "accounts",required = false) List<String> accounts, HttpServletResponse response) throws IOException, URISyntaxException, ParseException {
    CourseIndividualReportRequest courseIndividualReportRequest = new CourseIndividualReportRequest();
    courseIndividualReportRequest.setEmployeeName(employeeName);
    courseIndividualReportRequest.setEmpId(empId);
    courseIndividualReportRequest.setAccounts(accounts);
    courseIndividualReportRequest.setProjects(projects);
    courseIndividualReportRequest.setSkillMasters(skillMasters);

    service.generateIndividualReport(courseIndividualReportRequest);
    File file = new File("D:\\CandidateCheckedInReport.xls");
    HttpHeaders respHeaders = new HttpHeaders();
    respHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    respHeaders.setContentLength((int) file.length());
    respHeaders.setContentDispositionFormData("attachment", "CandidateCheckedInReport");

    InputStreamResource isr = new InputStreamResource(new FileInputStream(file));
    if (file.exists()) {
    }
    return new ResponseEntity<InputStreamResource>(isr, respHeaders, HttpStatus.OK);
}

服务实施

1 个答案:

答案 0 :(得分:1)

最可能的问题根源是:

InputStreamResource isr = new InputStreamResource(new FileInputStream(file));

file的路径名是“ D:\ CandidateCheckedInReport.xls”。

最可能的解释是运行Web服务器的“用户”没有读取该文件的权限。通常,限制Web应用程序访问Web应用程序或Web容器树之外的文件。这阻止了黑客利用编写不良的Web应用程序中的安全漏洞来读取和写入服务器文件系统中的任意文件。

解决方案:

  • 将您要提供的文件放入Web应用程序或Web容器的文件树中。

  • 修改访问限制,以允许Web服务器用户访问文件的当前位置。 请注意,仅允许访问需要通过网络应用访问的文件/目录。