3

我是 GWT 和一般 Web 应用程序的新手。

我正在制作一个 GWT Web 应用程序。它提供的一项功能是通过单击网页上的按钮来下载文件。不幸的是,文件本身实际上并不位于服务器端。服务器端需要通过对另一个 Web 服务的 REST 调用来获取它,以获取文件的 InputStream。

我的问题是:

  1. 如何将流传递到客户端以便浏览器可以开始下载?
  2. 在开始之前我是否必须在服务器上物理写入文件?

非常感谢

编辑:我找到了这个例子: How to use GWT when download Files with a Servlet?

在此示例中,文件物理上位于服务器端。我通过流从 Web 服务获得的文件非常大,我不想将它们保存在我的 GWT 服务器端。有什么建议么?

4

2 回答 2

4

我们使用上面示例中的 servlet。只需确保将标题和文件名设置为适当的类型即可。(文件名必须以正确的结尾结尾)

// process the data (In your case go get it)
byte[] data = generateReturnBuffer();
// do not cache
response.setHeader("Expires", "0");  
response.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");  
response.setHeader("Pragma", "public");
// content length is needed for MSIE
response.setContentLength(data.length);
// set the filename and the type
response.setContentType("application/pdf");  
response.addHeader("Content-Disposition", "attachment;filename=" + "fileName.pdf");  
ServletOutputStream out = resp.getOutputStream();
out.write(data);
out.flush();

其中响应是 servlet HttpServletResponse。
在此处查找有效的 mime 类型
在某些时候,您需要将数据存储在文件或内存中,因为某些版本的 Internet Explorer 需要文件长度。

于 2013-03-19T13:20:25.997 回答
0

将输入流转换为首选格式并创建临时文件

File f = File.createTempFile("tmp", "yourformat(.txt)", new File("C:/"));



 // deletes file when the virtual machine terminate
 f.deleteOnExit();

创建临时文件下载用户,退出时自动删除。

于 2013-03-19T13:24:23.107 回答