grails - 如何强制下载文件及其扩展名

时间:2010-09-16 00:54:17

标签: java grails download

我有以下代码

    def fileDoc = new File(document.documentLocation);
    if(fileDoc.exists()){
        // force download
        def fileName = fileDoc.getName();
        response.setContentType("application/octet-stream")
        response.setHeader "Content-disposition", "attachment; filename=${fileName}" ;
        response.outputStream << fileDoc.newInputStream();
        response.outputStream.flush();
        return true;
   } 

documentLocation包含类似“c:\ mydoc \ contains_some_long_string_with_id.pdf”的字符串。

我希望用户下载该文件,而不是从浏览器中查看。它适用于我可以下载的chrome,文件将显示“另存为”“contains_some_long_string_with_id.pdf”

但在firefox(最新版本)中..文件名仅限于“contains_some_long”(最后没有pdf扩展名)。

如何解决这个问题?该文件可以是csv,pdf,text,html,zip,pdf或其他文件格式。

谢谢

2 个答案:

答案 0 :(得分:1)

内容类型字符串可能需要是您正在下载的文档的MIME类型。

例如。对于PDF,它可能应该是“application / pdf”

答案 1 :(得分:1)

你可能有空格或特殊字符让Firefox感到困惑。文件名应该是带引号的字符串:

response.setHeader "Content-disposition", "attachment; filename=\"${fileName}\"";

请参阅RFC 2616, section 19.5.1