如何在linux上获取下载文件路径?

时间:2013-10-31 11:45:07

标签: java linux hibernate spring-mvc download

我已经使用spring和hibernate开发了一个java web应用程序。在我的应用程序中,有一个下载功能。该功能在windows环境中运行良好。但是当我在linux env上部署并运行应用程序时,使用Tomcat作为服务器,该函数返回零字节文件。文件类型为excel(xls)。但是浏览器将其作为pdf文件返回。

下载功能失败:

Download Failed

Linux上的Xls文件路径: 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;
}

我尝试了各种方法,但都没有成功。 我真的很感激任何想法,帮助或解决方案

此致 努斯

2 个答案:

答案 0 :(得分:0)

您遇到的问题是文件权限问题。该文件由'root'拥有,您的tomcat在其他用户上运行。

尝试将文件移动到tomcat用户可以访问的共享位置。试试/tmp位置或任何其他共享位置。

答案 1 :(得分:0)

如果是权限问题,请尝试使用chmod unix命令为文件提供所需的权限。

例如,chmod u + rwx

作为一种好的做法,尝试使用相对路径(使用类路径资源)而不是绝对路径来引用文件(因此它与环境无关)。