我已经使用spring和hibernate开发了一个java web应用程序。在我的应用程序中,有一个下载功能。该功能在windows环境中运行良好。但是当我在linux env上部署并运行应用程序时,使用Tomcat作为服务器,该函数返回零字节文件。文件类型为excel(xls)。但是浏览器将其作为pdf文件返回。
下载功能失败:
Linux上的Xls文件路径:
这是代码:
@RequestMapping("downloadXlsTemplate")
public String downloadTemplate(HttpServletRequest request, HttpServletResponse response) {
try {
String filename = "Template.xls";
File onLinux = new File("/opt/tomcat7/webapps/xls/" + filename);
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition", "attachment; filename=" + filename);
response.setContentLength((int) onLinux.length());
InputStream inputStream = new FileInputStream(onLinux);
OutputStream responseOutputStream = response.getOutputStream();
int bytes;
while((bytes = inputStream.read()) != -1) {
responseOutputStream.write(bytes);
}
inputStream.close();
responseOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
我尝试了各种方法,但都没有成功。 我真的很感激任何想法,帮助或解决方案
此致 努斯
答案 0 :(得分:0)
您遇到的问题是文件权限问题。该文件由'root'拥有,您的tomcat在其他用户上运行。
尝试将文件移动到tomcat用户可以访问的共享位置。试试/tmp
位置或任何其他共享位置。
答案 1 :(得分:0)
如果是权限问题,请尝试使用chmod unix命令为文件提供所需的权限。
例如,chmod u + rwx
作为一种好的做法,尝试使用相对路径(使用类路径资源)而不是绝对路径来引用文件(因此它与环境无关)。