开花并从服务器下载文件

时间:2014-11-28 14:24:38

标签: spring-mvc download magnolia

我正在尝试下载在服务器上生成的文件。其中一个放在光盘上,而另一些则从外部web服务下载为base64 decode byte []。

但是当我这样做的时候 FileCopyUtils.copy(new FileInputStream(dFile),response.getOutputStream());

下载的文件已损坏,因为它包含当前页面的html代码。有没有'特殊'的方式下载文件与Blossom?

此致

2 个答案:

答案 0 :(得分:1)

不确定你要做什么。所以你说你拿文件dFile然后把它转储到你从HttpServletResponse获得的输出流?

有很多原因导致它无法正常工作。您的组件可能位于某个页面内部,因此很可能已经存在编写输出流的内容。此外,您没有在任何地方提到是否正确设置响应标头以指示您正在发送文件。 IMO最简单的方法是创建一个自定义servlet,将其放在链中,与其他servlet一起发送文件而不是从组件发送文件。请查看示例DamDownloadServlet,特别是其handleResourceRequest ()方法。

HTH, 扬

答案 1 :(得分:0)

感谢您的回复。这可能很难做到,因为我需要用一些数据填充页面以及下载文件。所以我需要调用当前组件。你是对的 - 这是开花组件,它放在其他页面内。所以在输出流中有一些东西。

这是我的代码。如您所见,我正在设置正确的ContentType。

ServletContext context = RequestContextUtils.getWebApplicationContext(request).getServletContext();
            String mimetype = context.getMimeType(dFile.getAbsolutePath());
            response.setContentType(mimetype != null ? mimetype : "application/pdf");
            response.setContentLength(new Long(dFile.length()).intValue());
            response.setHeader("Content-Disposition", "attachment; filename=\""+dFile.getName()+"\"");
            try {
                FileCopyUtils.copy(new FileInputStream(dFile), response.getOutputStream());
            } catch (FileNotFoundException e) {
                logger.error(e);
            } catch (IOException e) {
                logger.error(e);
            }

此致 扬