这个问题在这里已经有了答案:
Is it possible to download a file from server to my device having MGWT&GwtPhoneGap app?
(2 个回答)
7年前关闭。
我正在使用 gwt canvas 。
我有 74kb 的字符串(图像)数据,我想将其传递给 servlet。以便 servlet 处理该数据并将内容发送到浏览器。这样它会提示用户下载它。
从客户端,我使用 RequestBuilder 调用 servlet,将请求数据设置给它,数据很大,所以我使用 post 请求。它正在击中 servlet,也在浏览器上抛出内容,但不显示任何下载内容。
当前 url 有 Canvas 。我认为这就是为什么它没有下载任何东西这个结论是因为如果我直接使用 http://localhost:8080/servlet
打开那个 servlet然后它下载它的属性(在这种情况下,我没有证明来自客户端的任何内容)但是对于具有 Canvas 的 url 其给出问题。
那么有什么方法可以在新选项卡中打开一个 url,并且可以使用 gwt 中的 post 请求调用 servlet。
最佳答案
您可以使用表单面板进行上传,表单面板将使用隐藏的 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();
如果您放置了正确的 header ,则 servlet 返回的内容将由用户导航器下载。
public class ServletDownloadDemo extends HttpServlet{
private static final int BYTES_DOWNLOAD = 1024;
@Override
public void doPost(HttpServletRequest request,
HttpServletResponse response) throws IOException{
//Get Parameters
String name1 = request.getParameter("name1");
String name2 = request.getParameter("name2");
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 - 使用具有大量数据的 post 请求调用 servlet 并在新选项卡中打开 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18998393/