作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要很少的帮助来实现这一点,在我的应用程序中,用户可以将文件上传到服务器并将其存储为 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();
}
现在在客户端,当用户点击显示按钮时,我想在浏览器中显示文件内容,而不是下载它。
我的客户端代码是:
showfilecontentButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String link = "/FileUploadByWaterTalks";
container.add(new HTML("<a href=\"" + link + "\">ShowFile</a>"));
}
});
上面的代码(客户端代码)没有显示文件的内容,它只是在下载文件。但我不想让用户下载它,我想向他们展示它的内容。
而且,我是否必须在这里配置一些东西才能解决。
resp.setContentType("text/plain");
resp.setHeader("Content-Disposition", "attachment; filename=output.txt");
希望您了解我的问题所在。请随意分享您的想法和解决方案以实现这一目标。
谢谢。
在第一个答案的基础上,我更改了部分代码:
更新的代码部分是:
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);
}
});
但浏览器仍然要求我保存文件而不是在浏览器本身中显示它。
最佳答案
首先删除您的 servlet 中的“Content-Disposition”。
其次,在您的代码中使用 GWT Anchor
,当用户单击时在新窗口或 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);
}
});
此方法适用于浏览器能够显示的任何文件,但请确保您发送适当的 Content-Type
header (text/plain、text/html、image/png 等。 )
关于gwt - 如何在 GWT 客户端显示文件,而不是下载 :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15458525/
我是一名优秀的程序员,十分优秀!