是否可以通过 GWT RPC Servlet 上传文件?

Posted

技术标签:

【中文标题】是否可以通过 GWT RPC Servlet 上传文件?【英文标题】:Is it possible to upload a file via GWT RPC Servlets? 【发布时间】:2012-02-06 13:05:36 【问题描述】:

是否可以使用 Google 的 GWT RPC 机制创建文件上传? 现在我正在使用一个简单的 HTTPServlet 和一个从表单中获取地址的 doPost 方法!

是否可以通过 GWT 的 FileUpload Widget 将 XML 文件上传到 RPC 服务并使用文件的内容(无需 gwtupload 等库的帮助)?

BR; 我的贝克

【问题讨论】:

【参考方案1】:

实际上,正如您提到的,使用 gwtupload 和通过 gwt-rpc 上传文件有两种方法,由于浏览器的安全性,这种方法有点困难。要使用 gwt-rpc 实现,您应该在继承 RemoteServiceServlet 的服务实现中覆盖 service(final HttpServletRequest request,HttpServletResponse response) 方法。 对于客户端,你应该有这样的代码:

final FormPanel formPanel = new FormPanel();
formPanel.setAction(GWT.getModuleBaseURL()+”fileUpload”);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setMethod(FormPanel.METHOD_POST);

service 方法中,您可以使用using FileUpload 获取文件,并且不要忘记在您的web.xml 中注册fileupload url 模式以及在继承RemoteService 的服务接口中注册@RemoteServiceRelativePath("path")。祝你好运!

【讨论】:

是最终版本。无法覆盖。 ` @Override public final void processPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, SerializationException `【参考方案2】:

这是可能的,但并不那么容易。首先,您需要能够从客户端代码中读取文件。大多数浏览器都支持 FileReader API,但不支持all。因此,对于 Internet Explorer,您将不得不使用闪存或其他插件技术来访问文件。

此外,默认情况下,GWT 中的文件读取器 API 没有绑定,因此您必须自己完成。

接下来您将通过 GWT -RPC 以 Base64 编码字符串的形式发送文件,并且您必须在服务器端进行解码。因此,如果您的用户开始上传大量大文件(大约 20 mb),您可能会遇到一些内存问题。

【讨论】:

以上是关于是否可以通过 GWT RPC Servlet 上传文件?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以以编程方式更改 GWT RPC servlet 路径?

RPC 的 GWT Servlet 模型是单线程模型,还是如何通过 GWT 实现高可用性?

servlet 的 GWT RPC 服务分配异常

GWT Servlet 错误 com.google.gwt.user.client.rpc .StatusCodeException: Tomcat 服务器上的 404

GWT RPC 警告:servlet 有映射,但 web.xml 没有对应的映射

GWT 和 XSRF 保护