我正在使用gwt canvas。
我有74kb字符串(图像)数据,我想把它传递给servlet。这样servlet处理该数据并将内容抛出到浏览器中。这样它会提示用户下载它。
从客户端我使用RequestBuilder来调用servlet,为它设置请求数据,数据很大,所以我使用post请求。它击中了servlet也在浏览器上抛出内容但没有显示任何下载内容。
当前网址有画布。我认为这就是为什么它没有下载任何这个结论是因为如果直接使用http://localhost:8080/servlet
打开该servlet然后下载它的属性(在这种情况下我不会证明任何内容来自客户端)但是对于有画布的网址给出了问题。
那么有什么方法我可以在新标签中打开一个网址,并可以使用gwt中的post请求调用servlet。
答案 0 :(得分:3)
您可以使用表单面板进行上传,表单面板将使用隐藏的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();
如果您输入正确的标题,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();
}
}