我写了一个代码使用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);
}
服务实施
答案 0 :(得分:1)
最可能的问题根源是:
InputStreamResource isr = new InputStreamResource(new FileInputStream(file));
file
的路径名是“ D:\ CandidateCheckedInReport.xls”。
最可能的解释是运行Web服务器的“用户”没有读取该文件的权限。通常,限制Web应用程序访问Web应用程序或Web容器树之外的文件。这阻止了黑客利用编写不良的Web应用程序中的安全漏洞来读取和写入服务器文件系统中的任意文件。
解决方案:
将您要提供的文件放入Web应用程序或Web容器的文件树中。
修改访问限制,以允许Web服务器用户访问文件的当前位置。 请注意,仅允许访问需要通过网络应用访问的文件/目录。