8

我正在使用 GWT(Google Web Toolkit)制作网站。我需要向用户显示一个表格,并让用户下载表格的内容。

在客户端,用户按下“下载”按钮时如何下载文件?

“下载”按钮有一个onClick()监听器。客户端类扩展Composite

我试图让类 extend HttpServlet,但它变得太复杂了。

我已经在这里阅读了帖子:

  1. http://www.mkyong.com/java/how-to-download-file-from-website-java-jsp/
  2. 使用 Servlet 下载文件时如何使用 GWT?

但我仍然不知道如何在客户端向用户提供可下载的文件。

4

4 回答 4

24

您真的需要区分 GWT 客户端 java 代码和服务器端 java 代码。

在您的 GWT Java 代码中的客户端

String url = GWT.getModuleBaseURL() + "downloadService?fileInfo1=" + fileInfo1;
Window.open( url, "_blank", "status=0,toolbar=0,menubar=0,location=0");

在您的非 gwt Java 代码中的服务器端 -

在 web.xml 中

<servlet>
    <servlet-name>downloadService</servlet-name>
    <servlet-class>AAA.BBB.CCC.DownloadServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>downloadService</servlet-name>
    <url-pattern>/<gwtmodulename>/downloadService</url-pattern>
</servlet-mapping>

在服务器包代码中,一个 servlet

    public class DownloadServlet extends HttpServlet{
    protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
        {
            String fileName = req.getParameter( "fileInfo1" );

            int BUFFER = 1024 * 100;
            resp.setContentType( "application/octet-stream" );
            resp.setHeader( "Content-Disposition:", "attachment;filename=" + "\"" + fileName + "\"" );
            ServletOutputStream outputStream = resp.getOutputStream();
            resp.setContentLength( Long.valueOf( getfile(fileName).length() ).intValue() );
            resp.setBufferSize( BUFFER );
            //Your IO code goes here to create a file and set to outputStream//

        }
    }

确保将文件内容推送到**outputStream**.

于 2012-12-06T08:52:31.163 回答
3

如果您知道文件的路径,代码片段如下所示。

button.addClickHandler(new ClickHandler()  
{ 

    @Overrid
    public void onClick(ClickEvent event) 
    {
        Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled");
    }
});
于 2012-12-05T14:41:35.283 回答
0

可以试试ClientIO用GWT在客户端读写文件

http://www.emitrom.com/blog/client-io

于 2013-11-27T08:24:51.967 回答
0

完成io部分第一题的答案...

你可以参考这个链接

http://www.programcreek.com/2009/02/java-convert-a-file-to-byte-array-then-convert-byte-array-to-a-file/

或参考此代码

File file = new File(enter the filepath here)
FileInputStream fis = new FileInputStream(file);
                ByteArrayOutputStream bos = new ByteArrayOutputStream();
                byte[] buf = new byte[1024];
                try {
                    for (int readNum; (readNum = fis.read(buf)) != -1;) {
                        bos.write(buf, 0, readNum); //no doubt here is 0
                        //Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
                        System.out.println("read " + readNum + " bytes,");
                    }
                } catch (IOException ex) {
                    System.err.println("unable to convert to bytes");
                }
                byte[] bytes = bos.toByteArray();
                outputStream.write(bytes);
                outputStream.flush();
                outputStream.close();

希望能帮助到你!

于 2016-03-28T03:26:45.350 回答