Gwt 用户如何在客户端下载文件(GoogleWebToolkit)

Gwt 用户如何在客户端下载文件(GoogleWebToolkit),gwt,download,Gwt,Download,我正在使用GWT(GoogleWebToolkit)创建一个网站。 我需要向用户显示一个表,并让用户下载表的内容 在客户端,当用户按下“下载”按钮时,如何下载文件 “下载”按钮有一个onClick()侦听器。客户端类扩展了复合类 我试图让类扩展HttpServlet,但它变得太复杂了 我已经在这里读过帖子: 但我仍然不知道如何在客户端向用户提供可下载的文件 如果您知道文件的路径,代码片段如下所示 button.addClickHandler(new ClickHandler() {

我正在使用GWT(GoogleWebToolkit)创建一个网站。 我需要向用户显示一个表,并让用户下载表的内容

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

“下载”按钮有一个
onClick()
侦听器。客户端类扩展了
复合类

我试图让类扩展
HttpServlet
,但它变得太复杂了

我已经在这里读过帖子:


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

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

    button.addClickHandler(new ClickHandler()  
    { 
    
        @Overrid
        public void onClick(ClickEvent event) 
        {
            Window.open(GWT.getHostPageBaseURL() + "/file.rar", "name", "enabled");
        }
    });
    

    您确实需要区分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>
    

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

    您可以尝试使用GWT在客户端上读取和写入文件


    要完成io部分第一项的答案

    你可以参考这个链接

    或参考此代码

    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();
    

    希望有帮助javax.servlet.http.HttpServlet#doGet
    methodGetFile()即可重用一个GWT服务servlet?这里没有定义,这对我来说不起作用。我看到一个新窗口打开(大约:空白),文件下载到文件系统,但不显示在浏览器中。对于客户端:
    window.Location.replace(“/downloadServlet”)
    
    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();