Java:上传文件并获取文件的字符串(内容)

嗨,我有GWT客户端与标准服务器端Servlet。

  • 我可以从GWT客户端上传文件,并在服务器端读取它的内容
  • 我可以将它作为String发送回客户端

我有动作的GWT FormPanel (myModule +“import”)。 FormPanel从servlet调用POST 。 然后浏览器将我重定向到myurl / import,这样我就可以看到上传文件的内容。

不是我想要的 。 我只想把我的弦回来。 我将submitCompleteHandler添加到我的FormPanel,但它没有记录任何结果。

我注意到servlet有方法这样的setContentType所以我尝试了text / html,text / plain …我不知道应该有什么…

用一句话来说,我想从servlet向客户端发送String,而不需要浏览器将其重定向到其他地方。 可能吗?

由于您要提交表单,因此您可以使用浏览器更改导航。 为了使它按照您希望的方式工作,您必须使用ajax发送文件。 对于GWT,有一个GWTUpload库可以让你这样做。

如果浏览器重定向您,那是因为您为FormPanel提供了“目标”。 默认情况下,它在隐藏的iframe(又名“ajax upload”)中提交。

正如在javadoc中所说的 ,如果你想要可靠地调用onSubmitComplete ,你必须在你的servlet中设置setContentType("text/html")

onSubmitComplete结果是返回的HTML的body innerHTML因此在发送带有<&值时必须非常小心。 让他们回来的唯一可靠方法是在服务器端逃避他们,并在客户端取消他们。 您可以使用自己的转义机制,也可以使用<& 。 在后一种情况下,对于客户端的unescape,你要么使用String#replace,要么创建一个HTML元素,用你得到的字符串设置它的innerHTML,然后得到它的innerText:

 public String htmlUnescape(String htmlEscaped) { Element tmp = Document.get().createDivElement(); tmp.setInnerHTML(htmlEscaped); return tmp.getInnerText(); } 

在服务器端,您将使用:

 escaped = content.replace("&", "&").replace("<", "<") 

(如果你不希望< s成为&lt;这里的顺序很重要,那么,替换<&就足够了, >"这里不会引起任何问题)

但是,在您的情况下,首先要确保文件的内容是“文本”而不​​是“二进制”,因为返回它是没有意义的,因为String可能会导致问题,具体取决于您在客户端使用该值的方式。