如何在GWT客户端显示文件,而不是下载:

Dip*_*pak 3 browser gwt

我需要一些帮助来实现这一点,在我的应用程序用户可以将文件上传到服务器并将其存储为blob对象,现在我需要向用户显示它们请求.

我要做的是在下面的代码中显示,

在服务器端,我将内容放到响应中:(此代码基于此博客文章WaterTalks实现)

     resp.setContentType("text/plain");
     resp.setHeader("Content-Disposition", "attachment; filename=output.txt");

     PrintWriter out = resp.getWriter();
     out.println("This is the output content");
     out.println("Probably something dynamic should go in here:::::");


PersistenceManager pm = null;
         try {
                pm = PMF.get().getPersistenceManager();
                javax.jdo.Transaction transaction = pm.currentTransaction();
                Extent e = pm.getExtent(WaterTalkFiles.class, true);
                Iterator iter = e.iterator();
                String returns = "";
                WaterTalkFiles file  =  (WaterTalkFiles)iter.next();
                Blob blob = file.getData();
                byte[] buffer = blob.getBytes();
                String s = new String(buffer);
                out.println(s);
         } catch (Exception e) {
                e.printStackTrace();
         } finally {
                if (null != pm)
                      pm.close();
         }
Run Code Online (Sandbox Code Playgroud)

现在在客户端,当用户点击显示按钮时,我想在浏览器中显示文件内容,而不是下载它.

我的客户端代码是:

showfilecontentButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                   String link = "/FileUploadByWaterTalks";
                    container.add(new HTML("<a href=\"" + link + "\">ShowFile</a>"));
            }
        });
Run Code Online (Sandbox Code Playgroud)

上面的代码(客户端代码)没有显示文件的内容,只是下载文件.但我不希望用户下载它,我想向他们展示它的内容.

而且,我是否必须在此配置一些东西才能解决问题.

 resp.setContentType("text/plain");
 resp.setHeader("Content-Disposition", "attachment; filename=output.txt");
Run Code Online (Sandbox Code Playgroud)

希望你得到我的问题.请随意分享您的想法和解决方案,以实现这一目标.

谢谢.


更新

在第一个答案的基础上,我改变了我的部分代码:

更新的代码部分是:

    resp.setHeader("Pragma", "no-cache");



final String url = "http://127.0.0.1:8888/FileUploadByWaterTalks";
String name = "output.txt";

Anchor link1 = new Anchor(name);
RootPanel.get().add(link1);
link1.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
        Frame f = new Frame(url);
        f.setSize("600px", "400px");
        f.getElement().getStyle().setBorderWidth(0, Unit.PX);
        RootPanel.get().add(f);
      }
    });
Run Code Online (Sandbox Code Playgroud)

但是浏览器仍然要求我保存文件而不是在浏览器中显示它.

Man*_*ino 6

首先删除servlet中的"Content-Disposition".

其次,Anchor在代码中使用GWT ,当用户点击新窗口或iframe中的链接时.

这里有一个使用新窗口的示例,另一个使用iframe:

    final String url = "http://gwtquery.googlecode.com/git/README.txt";
    String name = "README.txt";

    Anchor link1 = new Anchor(name);
    RootPanel.get().add(link1);
    link1.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        Window.open(url, "_blank", "");
      }
    });

    Anchor link2 = new Anchor(name);
    RootPanel.get().add(link2);
    link2.addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        Frame f = new Frame(url);
        f.setSize("600px", "400px");
        f.getElement().getStyle().setBorderWidth(0, Unit.PX);
        RootPanel.get().add(f);
      }
    });
Run Code Online (Sandbox Code Playgroud)

此方法适用于浏览器能够显示的任何文件,但请确保您发送适当的Content-Type标题(text/plain,text/html,image/png等)