我使用MGWT和GwtPhoneGap开发了一个应用程序,我使用rpc进行服务器通信。我想从服务器下载文件到我的客户端设备(iOs / android)。这可能吗?如果是这样的话 我需要做到实现我的目标吗?我没有得到MGWT论坛的大力支持。请告诉我如何做到这一点。
先谢谢
我在我的问题上付出了一些努力,我这样做了。但仍然没有成功。请仔细阅读我的代码。
public final native String download(String serverUrl,String filepath,Callback callback)
/*-{
return this.download(serverUrl, filePath, function(result) {
callback.Callback::o:onSuccess(Result;);)(result);
}, function(error) {
callback.Callback::o:onError(Error;);)(error);
});
}-*/;
答案 0 :(得分:3)
如果文件是一个简单的文件(例如PDF) 只需输入文件URL的链接,移动导航器就会将文件下载到手机中。 如果生成了文件,则必须创建用于执行下载的servlet:
public class ServletDownloadDemo extends HttpServlet{
private static final int BYTES_DOWNLOAD = 1024;
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException{
response.setContentType("text/plain");
response.setHeader("Content-Disposition",
"attachment;filename=downloadname.txt");
ServletContext ctx = getServletContext();
InputStream is = ctx.getResourceAsStream("/testing.txt");
int read=0;
byte[] bytes = new byte[BYTES_DOWNLOAD];
OutputStream os = response.getOutputStream();
while((read = is.read(bytes))!= -1){
os.write(bytes, 0, read);
}
os.flush();
os.close();
}
}
在发布请求的GWT中,您可以使用FormPanel将请求发送到隐藏的iframe。
FormPanel form = new FormPanel();
form.setMethod(FormPanel.METHOD_POST);
form.setAction("/downloadServlet");
FlowPanel hiddenPanel = new FlowPanel();
hiddenPanel.add(new Hidden("name1", "value"));
hiddenPanel.add(new Hidden("name2", "value"));
form.setWidget(hiddenPanel);
RootPanel.get().add(form);
form.submit();
或者你可以放一个真实的表格。
但是使用PhoneGap,您可以使用File API,但您必须向用户询问在手机中写入文件的位置。如果需要,可以通过RPC请求下载文件内容,然后写入文件。
答案 1 :(得分:0)
在我的情况下,我刚刚编写了一个提供文件的servlet。
从那时起,您有两个选择:
对于POST请求,请使用RequestBuilder(不是隐藏的表单!),然后使用JSNI将响应写入新窗口。
private native void openWindow(String contents, String blockedMsg) /*-{
var win = window.open("", "_blank");
if (win && win.top) {
win.document.write(contents);
} else {
alert(blockedMsg);
}
}-*/;