3

我正在使用 Spring 和 DWR 。我想返回一个文件对象作为响应,但是我将文件(要发送)保存在服务器临时位置,然后将其位置作为 href 发送到客户端的锚标记,但是我想知道是否有办法抛出在响应对象上直接向浏览器提交文件,而无需将其临时保存在服务器上。

我预计是否可以通过 DWR 发送文件作为响应。

4

4 回答 4

5
公共 ModelAndView writeFileContentInResponse(HttpServletRequest 请求,HttpServletResponse 响应)抛出 IOException {

        FileInputStream inputStream = new FileInputStream("FileInputStreamDemo.java"); //读取文件

        response.setHeader("Content-Disposition","attachment; filename=test.txt");
        尝试 {
            诠释 c;
            而 ((c = inputStream.read()) != -1) {
            response.getWriter().write(c);
            }
        } 最后 {
            如果(输入流!= null)
                inputStream.close();
                response.getWriter().close();
        }

        }
于 2011-09-14T07:02:14.883 回答
0

自从我使用 Spring 以来已经有好几年了,我对 DWR 不熟悉,但你的问题的本质是 web 的基础。

答案是肯定的,你可以。实际上,您需要设置 HTTP 标头Content-Disposition: attachment,然后流式传输内容。所有这些都将在对原始请求的响应中(而不是发回链接)。

实现这一点的实际代码将取决于您的情况,但这应该可以帮助您入门。

于 2011-09-14T06:57:01.187 回答
0

您从 Java Script 调用该方法,对吗?我并不真正了解 Spring 在这个流程中是如何相关的,但据我所知,DWR 允许您生成 Java Script Stubs 并直接从您的 java 脚本客户端代码在服务器上调用公开 bean 的 Java 方法。

您可以逐字节读取文件并从您的 java 方法中返回它,只要它确实返回一个字节数组。但是,您将如何处理客户端上的这个字节数组?

我只是认为在这个特定的流程中你不应该使用 DWR,而是发出一个普通的 AJAX 请求(如果 DWR 可以以某种方式包装它以方便 - 很好)。这个请求不应该到达 DWRServlet,而是由一个常规的 servlet/一些基于 web 的框架,比如 Spring MVC :) 一旦请求到达 servlet,使用

response.setHeader("Content-Disposition","attachment; filename=test.txt");

如前所述。

希望这有帮助,祝你好运!标记

于 2011-09-14T07:22:21.753 回答
-1

返回从客户端下载的 excel 示例:

//Java端:

public FileTransfer getExcel(Parametros param){
   byte[] result = <here get data>;
   InputStream myInputStream = new ByteArrayInputStream(result); 
   String excelFormat = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
   FileTransfer dwrExcelFile = new FileTransfer("excel.xlsx", excelFormat, myInputStream);
   return dwrExcelFile;
}

//Javascript端:

function downloadExcelFile() {
  dwr.engine.setTimeout(59000);
  var params = <params_to_send>;
  <Java_class>.getExcel(params, {callback:function(dataFromServer) {
    downloadExcelCallback(dataFromServer);
  }});
}

function downloadExcelCallback(data) {
   dwr.engine.openInDownload(data);
}
于 2014-03-21T08:52:56.143 回答