> Od: "Nikolaos Giannopoulos" <nikol...@brightminds.org> > Komu: Stripes Users List <stripes-users@lists.sourceforge.net> > Datum: 27.07.2010 18:29 > Předmět: Re: [Stripes-users] File Download > >Radim, > > >Radim wrote: >> Hi, >> first, excuse my english. I'm just a beginner. >> >Your English is just fine ;-) > >> I have a problem with file download. I'm trying to do file upload and >> download to/from server. File upload works just fine. But I have a probelm >> with download. I used StreamingResolution with InputStream. Something like >> this: >> >> public Resolution get() { >> InputStream is = null; >> try { >> is = new FileInputStream(new File(filePath)); >> >It is quite amazing that there are so many code examples and questions >pertaining to reading input streams and not wrapping them in buffered >input streams all over the net and even in some books. Even if this >doesn't fix your issue it will be HUGE in improving the reading of files >a fraction of the size of the ones you are using. > >Something like (off the top of my head): >BufferedInputStream is = new BufferedInputStream(new FileInputStream(new >File(filepath))); > >The wonderful thing about OO is that from that point onward "is" is just >an InputStream so the rest of your code need not change... . > >> } catch (FileNotFoundException ex) { >> Logger.getLogger(MyActionBean.class.getName()).log(Level.SEVERE, >> null, ex); >> } >> return new StreamingResolution(fileType, is); >> } >> >> But if the file is larger than something around 70 or 90 MB, java throws >> "java.lang.OutOfMemoryError: Java heap space". It seems like Java is trying >> to load whole file to RAM and then send it to browser. But I would like to >> work with large files - 2 GB. >> >Although I haven't looked at the code of StreamingResolution I imagine >just by its name that it will chunk read and send the contents of the >input stream otherwise it wouldn't be called StreamingResolution. >Buffering is probably your problem or you are hitting this bug (which >buffering might fix): > >http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6478546
I tried the version with BufferedInputStream and it looks same. The server just send first 70 - 90 MB of file and then throws java.lang.OutOfMemoryError: Java heap space. > >BTW what are your JVM settings / options? e.g. your min heap, max heap, >etc.... I'm not sure, but in Glassfish is: JVM Settings -> JVM Options -> "-Xmx512m". > >> Is there any way to send large file to browser? >> >Well there is the "obvious" way. Provide the user a URL to it and let >the web browser handle it. But this requires some conditions such as that: >a) The file is in a place that the web / app server can directly access >it (i.e. not in the database) >b) A URL can be formed to it (some people have issues here in that they >want to protect the file and hence stream it). Yes, I probably will do it this way. But I need some kind of security. Some files can be available to specific users. Maybe randomly generated names of files and periodically renaming will do the thing. > >Out of curiosity what are you streaming that is 70-90MB. I frequently I tried this with 200 MB large file. But I need to send even larger files. 2 - 3 GB. >see people new to Java or a framework and it appears the first thing >they want to stream is massive files. Files that large should ideally be >handled by the web / app server... and in the process it improves >overall performance all around because they typically are better coded / >optimized to handle it. > >HTH, > >--Nikolaos > >> Thanks, >> Radim >> >> ------------------------------------------------------------------------------ >> The Palm PDK Hot Apps Program offers developers who use the >> Plug-In Development Kit to bring their C/C++ apps to Palm for a share >> of $1 Million in cash or HP Products. Visit us here for more details: >> http://ad.doubleclick.net/clk;226879339;13503038;l? >> http://clk.atdmt.com/CRS/go/247765532/direct/01/ >> _______________________________________________ >> Stripes-users mailing list >> Stripes-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/stripes-users >> >> > > >------------------------------------------------------------------------------ >The Palm PDK Hot Apps Program offers developers who use the >Plug-In Development Kit to bring their C/C++ apps to Palm for a share >of $1 Million in cash or HP Products. Visit us here for more details: >http://ad.doubleclick.net/clk;226879339;13503038;l? >http://clk.atdmt.com/CRS/go/247765532/direct/01/ >_______________________________________________ >Stripes-users mailing list >Stripes-users@lists.sourceforge.net >https://lists.sourceforge.net/lists/listinfo/stripes-users > ------------------------------------------------------------------------------ The Palm PDK Hot Apps Program offers developers who use the Plug-In Development Kit to bring their C/C++ apps to Palm for a share of $1 Million in cash or HP Products. Visit us here for more details: http://p.sf.net/sfu/dev2dev-palm _______________________________________________ Stripes-users mailing list Stripes-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/stripes-users