在 smartGWT 中打开/保存文件

2024-03-04

我已经实现了 RPCService、RPCServiceAsync 和 RPCServieImpl。单击按钮后,将调用服务器端的服务,它将从数据库中获取数据并创建文件。创建文件后,我需要在客户端打开该文件,并需要提示一个包含打开/保存选项的对话框。 我如何实现这个打开文件部分。请建议一种实现方法..请回复..提前致谢....

@Hambend:我还有一个澄清!...如何在另一个 servlet 中调用这个 doGet 方法,即在我的 onmodule 加载类中,我在单独的布局中有很多小部件,其中一个这样的小部件是 BUTTON ?单击此按钮时,将调用服务 RPCServiceImpl 并完成所有操作,并在蛇形函数中创建文件 (public intGenerateFile(String name)() )。如何让该函数调用 doGet 方法?因为 doGet 需要请求、响应参数一起传递?请建议我一种调用该方法的方法。提前致谢


GWT 的 RPC 服务只能将 java 对象发送回客户端。要将文件发送回用户,您需要使用非 GWT java servlet。这是我之前使用过的一些代码,用于从存储库提供 jpeg 图像。

public class ImageServlet extends HttpServlet {
    private final String repository = "/var/images/";

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        String filename = request.getParameter("file");

        // Security: '..' in the filename will let sneaky users access files
        // not in your repository.
        filename = filename.replace("..", "");

        File file = new File(repository + filename);
        if (!file.exists())
            throw new FileNotFoundException(file.getAbsolutePath());

        response.setHeader("Content-Type", "image/jpeg");
        response.setHeader("Content-Length", String.valueOf(file.length()));
        response.setHeader("Content-disposition", "attachment;filename=\"" + filename + "\"");

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
        byte[] buf = new byte[1024];
        while (true) {
            int length = bis.read(buf);
            if (length == -1)
                break;

            bos.write(buf, 0, length);
        }
        bos.flush();
        bos.close();
        bis.close();
    }
}

“内容处置:附件”应该会导致大多数浏览器下载文件而不是显示它,文件名默认为您提供的任何文件名。使用此 servlet 的方法是让用户调用您已有的 RPCService,这会将文件保存到存储库文件夹中。然后,您可以使用以下 url 将它们链接或重定向到此 servlet:http://your.domain.com/fileServlet?file=myFile.jpg http://your.domain.com/fileServlet?file=myFile.jpg。显然,使用此设置会存在安全风险,如果用户可以猜测文件名,他们就可以下载其他人的文件。

您可能想要做的是将 RPC 服务中的数据库代码合并到此 servlet 中。无需将文件保存在服务器上的任何位置,您可以获取数据库结果并将其写入response.getOutputStream() 或response.getWriter(),其方式与将它们写入文件的方式完全相同,只是结果会变为直接给用户。只要您正确设置内容标题,用户就不会注意到差异。

您无法从另一个 servlet 调用此方法,使浏览器将其作为文件下载的唯一方法是通过普通 HTTP 请求访问它。首先,您在 web.xml 文件中声明 servlet,就像声明 GWT RPC 服务一样:

<servlet>
    <servlet-name>ImageServlet</servlet-name>
    <servlet-class>
        com.package.ImageServlet
    </servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ImageServlet</servlet-name>
    <url-pattern>/imageServlet</url-pattern>
</servlet-mapping>

现在任何 HTTP GET 请求都会http://your.tomcat.server/webapp/imageServlet http://your.tomcat.server/webapp/imageServlet将被 ImageServlet.doGet() 获取。然后在客户端,您可以创建一个指向该文件的普通 html 链接:

new HTML("<a href='" + GWT.getHostPageBaseURL() + "imageServlet?file=" + filename + "'>download</a>");

...或者你should能够将其放入 ClickHandler 中(我还没有测试过):

Window.Location.assign(GWT.getHostPageBaseURL() + "imageServlet?file=" + filename);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 smartGWT 中打开/保存文件 的相关文章

  • SPNEGO 密码身份验证问题

    我已将我的应用程序配置为通过 SPNEGO 与 Websphere 使用 Kerberos 身份验证 这是详细信息 krb5 conf libdefaults default realm ABC MYCOMPANY COM default
  • 从文本文件中读取阿拉伯字符

    我完成了一个项目 在该项目中我读取了用记事本编写的文本文件 我的文本文件中的字符是阿拉伯语 文件编码类型是UTF 8 当在 Netbeans 7 0 1 中启动我的项目时 一切似乎都正常 但是当我将项目构建为 jar 文件时 字符以这种方式
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 最快的高斯模糊实现

    如何以最快的速度实施高斯模糊 http en wikipedia org wiki Gaussian blur算法 我要用Java来实现它 所以GPU http en wikipedia org wiki Graphics processi
  • 迭代函数可以调用自身吗?

    当观看下面的 MIT 6 001 课程视频时 讲师在 28 00 将此算法标记为迭代 但是 在 30 27 他说这个算法和实际的 递归 算法都是递归的 该函数正在使用基本情况调用自身 那么这次迭代情况如何 private int itera
  • 运行 java -jar 时出现 java.lang.ClassNotFoundException

    我正在使用 ant 来构建我的build xml文件 它编译正常 但随后得到运行时java lang NoClassDefFoundError通过 运行生成的 jar 时java jar my jar jar 似乎这个问题出现了很多 但没有
  • 本地开发的 Azure Functions 扩展包版本问题

    我有一个带有队列触发器的 Java 11 Azure 函数 该函数在部署到 Azure 时按预期工作 并正确从定义的服务总线主题中提取消息 但是 运行相同的功能locally除非我回滚版本 否则不起作用Azure Functions 绑定扩
  • JavaFX使节点覆盖父节点边框颜色

    我有一个如下所示的节点 仅使用 css 我希望标签覆盖其父边框颜色 因此标签下方的边框颜色部分变得不可见 我用来制作这个边框的CSS代码 fx border color black fx border width 3 fx border r
  • 无法从资源加载图片

    So I am trying to load a image file from a resource so that when I export my application into a jar file it could be use
  • 无法在 Java 中输出正确的哈希值。怎么了?

    在我的 Android 应用程序中 我有一个 SHA256 哈希值 我必须使用 RIPEMD160 消息摘要算法进一步对其进行哈希值 我可以输出任何字符串的正确 sha256 和ripemd160 哈希值 但是当我尝试使用ripemd160
  • 插入时的 iBatis 判别器

    我有一个抽象类Example以及与之相伴的具体子类 我使用鉴别器来提取数据out数据库的 像这样
  • 在带有 Protocol Buffers 的项目中使用 Proguard 有什么特点?

    我有一个使用 Google Protocol Buffers 的项目 一旦我尝试用 ProGuard 对其进行混淆 似乎 protobuf 会导致问题 我将所有自己的类打包成mybuildedclasses jar 谷歌代码被打包成prot
  • 如何从字符串中解析一个大整数? [复制]

    这个问题在这里已经有答案了 我有一个这样的方法 Integer parseInt myInt 不是这个整数变得很长 我得到以下异常 java lang NumberFormatException For input string 40001
  • 如何从intellij项目视图中隐藏不必要的文件?

    给定一个示例 gradle 项目 其项目结构如下所示 正如你所看到的 有很多东西你实际上不需要在想法中看到 但你需要它们存在 我知道下面被忽略的文件 文件夹类型Editor File Types但这些正在影响库和项目 idea 会在各处忽略
  • Java 中 JButton 的击键/热键

    最初我使用 JMenu 并建立热键以使用加速器工作 它运行得很好 现在我想在 JButton 中实现相同的行为 但我陷入困境 这是我编写的代码 请分享您的想法 以便我可以走上正确的道路 import javax swing import j
  • 删除 JFX 中选项卡后面的灰色背景

    So is there any way to remove the gray area behind the tab s 我尝试过用 CSS 来做到这一点 但没有找到方法 要设置 tabpane 标题的背景颜色 请在 CSS 文件中写入 t
  • 如何从 JavaFX 中的另一个控制器类访问 UI 元素?

    我有一个使用 NetBeans 8 编写的 JavaFX Java 8 应用程序 没有SceneBuilder 我的应用程序有一个主窗口 该窗口有自己的 FXML 文件 primary fxml 和自己的控制器类 FXMLPrimaryCo
  • 如何使用自定义 JDK 构建 Jenkins 项目?

    我有一个常规的 Jenkins 实例 运行一些多分支管道 该实例在 JDK 11 上运行 因为 Jenkins 并不真正支持更高版本 没关系 但不好的是 我的所有管道似乎也都受到 Java 11 的限制 Jenkins 仅使用它自己也使用的
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐

  • 套接字编程权限被拒绝

    下面的代码是TCP服务器程序 只是发送回 HELLO 给客户 当我使用端口 80 运行服务器时 返回 bind Permission denied 12345端口没问题 我如何为该服务器程序使用端口 80 include
  • 包含 iframe 的页面上的 Bootstrap 3 导航栏

    我在 Bootstrap 3 上的导航栏有问题 添加时iframe到页面上它不会扩展 我无法导航 在小屏幕上 然而 最大化窗口 大屏幕 会显示导航栏就在那里 并且所有项目都可用且可单击 没有 iframe 一切都会按预期进行 谁能想象 为什
  • JavaFx:在 fxml 文件中设置窗口标题

    我刚刚开始将 JavaFx 用于新应用程序 我知道如何在 java 代码中设置窗口标题 但如何在 fxml 文件中设置它 感谢您的帮助 编辑 这是我的代码 Override public void start Stage primarySt
  • Flutter Android Embedding V1 和 V2 有什么区别

    我正在开发一个带有背景内容的 Flutter 插件 最近 我遇到了一些关于Flutter Android 嵌入 in the android alarm manager https pub dev packages android alar
  • 在 MacOS 上使用 sourcetree 连接到 Azure devops 存储库

    我已经在 azure devops 上创建了一个新项目 现在我尝试向 sourcetree 添加一个帐户 我按以下方式提出意见 主机 Azure DevOps 主机旁边的链接 https 电子邮件受保护 myuser https myuse
  • MigrateDatabaseToLatestVersion 没有运行 Seed() 方法

    我正在尝试自动生成我的数据库 如果它不存在 并运行Seed 方法来填充数据 在我的数据库上下文构造函数中 我有这个 Database SetInitializer new MigrateDatabaseToLatestVersion
  • antMatchers 匹配路径的任意开头

    我有将用于身份验证的 REST 服务 身份验证端点将如下所示 api v 1 authentication API 版本是一个变量 可以更改它以反映更新的版本 一个例子是 api v 2 authentication 我喜欢有一个antMa
  • 使用 FFmpeg 保持宽高比

    我需要使用 FFmpeg 转换一堆视频文件 我运行一个 Bash 文件 可以很好地转换所有文件 但是如果转换的文件不是 16 9 格式 则会出现问题 当我将屏幕尺寸固定为 s 720x400 时 如果原始宽高比为 4 3 FFmpeg 将创
  • 如何将此二维数组的内容保存到文件中

    我需要一些帮助来尝试将二维数组的内容保存到文件中 首先 我不确定文件应该是什么类型等 txt或dat 我已经编辑了该帖子 以便代码采用文本格式而不是图像 这就是我到目前为止所得到的 program CaptureTheSarum APPTY
  • 如何在不加载python中完整json的情况下更新json文件中键的值?

    考虑一下 更新前json文件的内容是 key1 value A key2 value B 我想将 key1 更新为值 C 而不实际使用 json load 打开 json 文件 所以最终的输出应该是 key1 value C key2 va
  • 我不能在 FancyZoom 弹出窗口中使用 JQuery 吗?

    我们正在使用花式变焦 http static railstips org orderedlist demos fancy zoom jquery 在屏幕上生成标准的 javascript 弹出效果 我们希望使用 JQuery 响应用户点击
  • Common Lisp 中 do 循环中的多个值绑定

    如何在 do 循环内绑定从函数返回的多个值 下面的显然是非常错误的 但是这样的事情可能吗 do x y z 3 val fn 3 val fn equal y some val y values x y z 或者也许有一种方法可以使用多值绑
  • 我怎样才能改变kivy窗口位置

    有没有其他方法可以在不使用以下内容的情况下更改窗口位置 from kivy config import Config Config set graphics position custom Config set graphics left
  • 使用 XAMPP Server Linux (Ubuntu) 在 Laravel 4 上迁移时找不到驱动程序

    我已经安装了 Laravel 4 1 一切正常 但是当我尝试使用迁移时 它会抛出一个 PDO 异常 PDO异常 找不到驱动程序 我在 StackOverFlow 上找到了很多答案 但不幸的是 没有一个能解决我的问题 我尝试启用 pdo 扩展
  • 将 NaN 值替换为每列的特定值

    我有一个包含值以及一些 NaN 的数据框 现在我有了列的平均值 我想将特定列的平均值插入到 NaN 值中 例如 ColA 和 ColB 的 NaN 被替换为我有的平均值 https i stack imgur com vAr2p png 我
  • Java 11 迁移:可从多个模块访问包问题

    我正在将 Java 8 项目迁移到 Java 11 使用的 IDE 是 Eclipse 2020 09 我还没有模块化该项目 对于以下进口 import org w3c dom Document import org w3c dom Ele
  • 生成 parquet 文件 - R 和 Python 之间的差异

    我们已经生成了一个parquet文件输入Dask Python 并与Drill R 使用Sergeant包 我们注意到几个问题 的格式Dask i e fastparquet has a metadata and a common meta
  • 将由空格分隔的字符串中的单词分配给变量? C++ [qt] [重复]

    这个问题在这里已经有答案了 我只是想知道将空格分隔的字符串中的单词分配给变量的技术术语叫什么 这样我就可以查找它的教程 任何术语 链接或解释将不胜感激 你可以这样做 QString lineText some sample words QS
  • 在 Sitecore MVC 中的视图中获取媒体 url

    我有一个存储在媒体库中的 mp3 文件 它在项目的媒体字段中被引用 我可以通过在 Web 表单或类中执行 Sitecore Resources Media MediaManager GetMediaURL 来获取 URL 但是如何在 MVC
  • 在 smartGWT 中打开/保存文件

    我已经实现了 RPCService RPCServiceAsync 和 RPCServieImpl 单击按钮后 将调用服务器端的服务 它将从数据库中获取数据并创建文件 创建文件后 我需要在客户端打开该文件 并需要提示一个包含打开 保存选项的