I should state for the benefit of others that what really worked in
this case was added the <div id="__gwt_downloadFrame" tabIndex='-1'></
div>)  to my HTML page and then adding the Frame to the results of the
the RootPanel.get("__gwt_downloadFrame");.  This put my IFRAME on the
base of the page.

So, the key appears to be NOT nesting the IFRAME deeply in the DOM
when adding the URL to it.

This is actually what our pure javascript solution was doing, but I
didn't realize the impact of mistakenly adding my Frame to a panel so
much deeper in the DOM with the GWT solution.

Very helpful!
Thanks again!

On Oct 20, 9:30 am, mike b <mbaker.t...@gmail.com> wrote:
> Thank you!  Thank you!  Thank you!
>
> That worked on the first try!!  Much Appreciated!!!
>
> On Oct 20, 12:28 am, Jim Douglas <jdou...@basis.com> wrote:
>
> > This is what I'm doing.  YMMV and assorted disclaimers; it's quite
> > likely that this can be improved upon.
>
> > (1) I generate this place-holder for the file download in my GWT web
> > pages:
>
> >         out.println("<div id=\"__gwt_downloadFrame\" tabIndex='-1'></
> > div>");
>
> > (2) To initiate a download from the client side, I do this:
>
> >     public static void download(String p_uuid, String p_filename)
> >     {
> >         String fileDownloadURL = "/fileDownloadServlet"
> >                                + "?id=" + p_uuid
> >                                + "&filename=" +
> > URL.encode(p_filename);
> >         Frame fileDownloadFrame = new Frame(fileDownloadURL);
> >         fileDownloadFrame.setSize("0px", "0px");
> >         fileDownloadFrame.setVisible(false);
> >         RootPanel panel = RootPanel.get("__gwt_downloadFrame");
> >         while (panel.getWidgetCount() > 0)
> >             panel.remove(0);
> >         panel.add(fileDownloadFrame);
> >     }
>
> > (3) The corresponding FileDownloadServlet does this (with unimportant
> > details omitted):
>
> >     @Override
> >     protected void doGet(HttpServletRequest p_request,
> >                          HttpServletResponse p_response)
> >         throws ServletException, IOException
> >     {
> >         String filename = p_request.getParameter("filename");
> >         if (filename == null)
> >         {
> >             p_response.sendError(SC_BAD_REQUEST, "Missing filename");
> >             return;
> >         }
>
> >         File file = /* however you choose to go about resolving
> > filename */
>
> >         long length = file.length();
> >         FileInputStream fis = new FileInputStream(file);
> >         p_response.addHeader("Content-Disposition",
> >                              "attachment; filename=\"" + filename +
> > "\"");
> >         p_response.setContentType("application/octet-stream");
> >         if (length > 0 && length <= Integer.MAX_VALUE);
> >             p_response.setContentLength((int)length);
> >         ServletOutputStream out = p_response.getOutputStream();
> >         p_response.setBufferSize(32768);
> >         int bufSize = p_response.getBufferSize();
> >         byte[] buffer = new byte[bufSize];
> >         BufferedInputStream bis = new BufferedInputStream(fis,
> > bufSize);
> >         int bytes;
> >         while ((bytes = bis.read(buffer, 0, bufSize)) >= 0)
> >             out.write(buffer, 0, bytes);
> >         bis.close();
> >         fis.close();
> >         out.flush();
> >         out.close();
> >     }
>
> > That all causes the selected file to be downloaded to the client
> > browser in whatever way the browser chooses to handle downloads.
>
> > On Oct 19, 8:49 pm, mike b <mbaker.t...@gmail.com> wrote:
>
> > > I have read all the other posts about downloading Excel files and how
> > > to do it w/ an IFRAME, with RequestBuilder, and Window.open().
> > > However, none of them actually work.  Luckily, I have a working
> > > servlet which executes and returns successfully with javascript.
> > > However, we'd like to do it all in GWT.  The error message from IE is
> > > below.  The Window.open() DOES work with FF, but not with IE.
> > > Unfortunately, we must deploy to IE, no options there.
>
> > > Situation:
> > > GWT 2.0.4  mvp4g 1.2.0
> > > Need to download a file to open in Excel.  At this point, its actually
> > > a text file, but the MIME type is setup for Excel.
>
> > > The servlet has been tested w/ straight java script using
> > > "document.body.appendChild(iframe);".  This works like a champ in IE
> > > and FF.
>
> > > However, when I do "Window.open(url, "_self",null);" in GWT, IE can't
> > > download the file.  It throws an error saying...
>
> > > "
> > > Internet Exploroer cannot download MyFile from localhost
>
> > > IE was not able to open this Internet site.  The requests site is
> > > either unavailable or cannot be found.  Please try again later.
> > > "
>
> > > In GWT, I have also tried just using a Frame, adding it to a Panel,
> > > and then calling myFrame.setUrl("myUrl");
>
> > > This also successfully gets to the servlet, but fails w/ the above
> > > error message while trying to "open" the file.
>
> > > It seems as if GWT is telling the browser to cancel the download when
> > > it pops up.
>
> > > Any suggestions?  Any guesses?
>
> > > Thanks,
> > > mikeb

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-tool...@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to