On Mon, Mar 25, 2013 at 11:54 AM, Howard W. Smith, Jr. < smithh032...@gmail.com> wrote:
> On Mon, Mar 25, 2013 at 9:00 AM, Thad Humphries > <thad.humphr...@gmail.com>wrote: > >> On Sun, Mar 24, 2013 at 4:46 PM, Konstantin Kolinko >> <knst.koli...@gmail.com>wrote: >> >> > 2013/3/25 Thad Humphries <thad.humphr...@gmail.com>: >> > > I have a web-app that uses a servlet for downloading files from a >> > > repository--PDF, Office, images, zip, etc. It works with desktop >> > > browsers--IE, Firefox, Chrome, and Safari--on their various >> platforms. It >> > > also works fine with Firefox from Android (2.3 and 4.x tested). >> However >> > > when I try with Android's default WebKit browser, the servlet fails >> > > immediately with org.apache.catalina.connector.ClientAbortException >> (so >> > > says the stderr log). >> > >> > 1. Is this issue specific to some kind of files, or it occurs with all >> of >> > them? >> > >> >> All of them--PDF, XLS, DOC, DOCX, TIFF, ZIP, etc. Every file type I've >> tried. >> > > Hmmm, interesting thread (and responses so far). I think I am aware of > this 'Android default Webkit browser' you are referring to. I always avoid > using it, and download Google Chrome from Google Play store to my Android > devices, and I don't think I ever tested my web app with the default > browser installed on Android devices. > > I have downloaded PDF files (generated in-memory) from my java/JSF web app > to Android device, and I have never seen this ClientAbortException. my web > app also has at least one iPad enduser (which has Google Chrome installed > on iPad). I am unaware of his experience and I don't think he downloads PDF > files from web app to his iPad, but I am quite confident that it works or > will work. :) > > > > >> > > > I suspect this is a problem with mobile WebKit, and that circumventing >> > the >> > > abort might be a "bad thing" even if it's possible. However I thought >> I'd >> > > inquire here if there is a Tomcat way around it. If not, it seems my >> > > alternatives are (1) use Java Mail to mail the user the file, since >> mail >> > > apps open their attachments; and (2) write iOS and Android apps file >> > query >> > > and downloading. Neither prospect thrills me. >> > > Okay, i just tested this with/in my web app on my Google Nexus 7 (android, > of course). I offer Download, Print, and View hyperlinks within the web > app. Mind you, this is PrimeFaces xhtml below. > > ---download--- > <p:commandLink value="Download" ajax="false" > > actionListener="#{pf_ordersController.refreshContractsToDownload()}"> > <p:fileDownload value="#{contractToDownload.file}"/> > </p:commandLink> > > Test and results: > > clicked Download button, PDF downloaded to Google Nexus 7 (Google Chrome > browser, of course), showed up in notifications, instead of PDF Viewer app, > I selected to open the PDF document in Adobe Acrobat (app that was > downloaded from Google Play). > > ---view--- > <h:commandLink value="View" target="_blank" > > actionListener="#{pf_ordersController.refreshContractsToDownload()}"> > <p:fileDownload value="#{contractToDownload.file}" > contentDisposition="inline"/> > </h:commandLink> > > Test and results: > > clicked View button, I saw another web page tab open rather quickly in the > Google Chrome browser on Google Nexus 7, and then the new tab closed > immediately, and then I saw the 'Starting download' toast (at bottom of > Google Nexus 7), but I didn't see the file in notifications or downloads, > and I didn't see any exceptions in my TomEE/tomcat7 logs. > > With that said, maybe I just duplicated this issue/exception that you have > been experiencing. If I'm not mistaking, PrimeFaces is using the servlet > solution for file downloads. > > So, based on this test of mine, it is best to offer a 'download' hyperlink > 'only' on mobile devices as I am already detecting mobile devices when they > login to the web app. > > Thanks for this topic. now I know what i 'need' to do. :) > > Forgot to mention; i would definitely provide an option for files to be emailed to endusers. my web app has that option as well as it is more reliable. i have found that endusers do a lot of multi-tasking on mobile devices, and mobile browsers seem to lose connection when they go to some other app. i may not be describing this correctly, but I have noticed this behavior, myself.