GWT:如何实现文件下载

时间:2013-03-19 12:57:51

标签: java gwt servlets

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

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

我的问题是:

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

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

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

2 个答案:

答案 0 :(得分:3)

我们使用类似上面示例的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 Look here for the valid mime types
在某些时候,您需要将数据存储在文件或内存中,因为某些版本的Internet Explorer需要文件长度。

答案 1 :(得分:0)

将inputstream转换为首选格式并创建tempfile

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



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

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