Wow, Thanks a lot! Could you please let me know when SNAPSHOT with the fix will be available?
On Wed, Mar 29, 2017 at 8:50 PM, Sven Meier <[email protected]> wrote: > Hi, > > so we have to change the Location.Blob to use XMLHttpRequest directly, > because jQuery does not support blob downloads :/. > > I've change the JavaScript and now downloading of the zip works fine. > > FileSystemResource might not be the best candidate (because it's not > serializable), but you can use an indirection to prevent it being serialized > along with AjaxDownload: > > final AjaxDownload download = new AjaxDownload( > new IResource() > { > @Override > public void respond(Attributes attributes) > { > new > FileSystemResource(zipFile.toPath()).respond(attributes); > } > } > ); > > Have fun > Sven > > > > On 29.03.2017 15:12, Maxim Solodovnik wrote: >> >> Filename is minor issue .... >> Main problem is invalid file :( >> >> How can I serve the file from file system? I thought filesystemreference >> if >> the best candidate ..... >> >> WBR, Maxim >> (from mobile, sorry for the typos) >> >> On Mar 29, 2017 8:08 PM, "Sven Meier" <[email protected]> wrote: >> >>> Hi Maxim, >>> >>> three things: >>> >>> - filename ... no one sets the file name :P >>> >>> - serializable error ... FileSystemResource holds a reference to the >>> path, >>> which is not serializable >>> >>> - corruct zip ... my bad, it seems that Location.Blob mangles the file on >>> the client side >>> >>> I'll see what I can do about Location.Blob - it might be an encoding >>> issue. >>> >>> Have fun >>> Sven >>> >>> >>> On 29.03.2017 14:15, Maxim Solodovnik wrote: >>> >>>> here you are: https://github.com/solomax/ajax-download >>>> Absolutely don't understand what is going on :( >>>> >>>> On Wed, Mar 29, 2017 at 6:30 PM, Maxim Solodovnik <[email protected]> >>>> wrote: >>>> >>>>> Yep, zip file is valid >>>>> Breakpoint at AjaxDownload.ResourceBehavior#onRequest() is not hit :( >>>>> Will try to create quickstart >>>>> >>>>> something extremely weird >>>>> >>>>> On Wed, Mar 29, 2017 at 2:22 AM, Martin Grigorov <[email protected]> >>>>> wrote: >>>>> >>>>>> Hi Maxim, >>>>>> >>>>>> On Tue, Mar 28, 2017 at 11:06 AM, Maxim Solodovnik < >>>>>> [email protected]> >>>>>> wrote: >>>>>> >>>>>> Thanks a lot Martin for detailed explanation >>>>>>> >>>>>>> I do have this functionality working with old version of AjaxDownload >>>>>>> >>>>>>> And here is my first try to migrate to the new internal wicket >>>>>>> AjaxDownload: >>>>>>> https://github.com/apache/openmeetings/commit/ >>>>>>> 5fa2c87f212e4eecdd1368f2ae7fa8762832838f >>>>>>> >>>>>>> I would appreciate if you can take a look at this tiny commit. >>>>>>> >>>>>>> Something really doesn't work as expected .... >>>>>>> >>>>>>> Commited version behaves wrong: >>>>>>> 1) file downloaded has wrong name >>>>>>> >>>>>>> You do not set file name anywhere! >>>>>> >>>>>> Keep a reference to the constructed ResourceResponse and call its >>>>>> #setFileName(...) >>>>>> >>>>>> >>>>>> 2) is not valid zip file (cannot be opened) >>>>>>> >>>>>>> Is the backupPath representing a ZIP file ? >>>>>> >>>>>> >>>>>> 3) for some reason I'm not able to get to breakpoint at line 115 [1] >>>>>>> >>>>>>> Put a breakpoint at >>>>>>> AjaxDownload.ResourceBehavior#onResourceRequested() >>>>>> >>>>>> and >>>>>> see what happens >>>>>> >>>>>> >>>>>> Additionally I got NotSerializable exception in case I made "download" >>>>>>> >>>>>>> class final variable >>>>>>> >>>>>>> java.nio.file.Path is not Serializable! >>>>>> >>>>>> >>>>>> What am I doing wrong? >>>>>>> >>>>>>> [1] https://github.com/apache/openmeetings/commit/ >>>>>>> 5fa2c87f212e4eecdd1368f2ae7fa8762832838f#diff- >>>>>>> 0a499c88998a93ceb51c347836aa6195R115 >>>>>>> >>>>>>> On Thu, Mar 23, 2017 at 3:16 AM, Martin Grigorov >>>>>>> <[email protected] >>>>>>> wrote: >>>>>>> >>>>>>>> On Wed, Mar 22, 2017 at 12:59 PM, Maxim Solodovnik < >>>>>>>> [email protected] >>>>>>>> >>>>>>>> wrote: >>>>>>>> >>>>>>>> Actually I have 2 example use cases: >>>>>>>>> >>>>>>>>> 1) user selects files on file tree >>>>>>>>> 2) as soon as file is selected and download is enabled for it, used >>>>>>>>> can >>>>>>>>> press ajax download button and get the file >>>>>>>>> >>>>>>>>> Another case: >>>>>>>>> User requests system backup >>>>>>>>> As soon as backup is created (Progress complete) >>>>>>>>> Download of newly created file should be initiated >>>>>>>>> >>>>>>>>> I can't create ResourceReference and override getResourceStream of >>>>>>>>> it >>>>>>>>> >>>>>>>> since >>>>>>>> I only have resource just before download >>>>>>>>> >>>>>>>>> Wicket IResource is an abstraction over the real resource. >>>>>>>> >>>>>>>> In my case i also create the response on the fly. It is either a >>>>>>>> single >>>>>>>> File or a Zip file with several entries. >>>>>>>> The ResourceReference is more or less just an endpoint with almost >>>>>>>> no >>>>>>>> >>>>>>> logic >>>>>>> >>>>>>>> at all. It just creates the IResource. >>>>>>>> The IResource uses the information from the request parameters / >>>>>>>> session >>>>>>>> >>>>>>> / >>>>>>> >>>>>>>> somewhere else to create the actual response (the files). >>>>>>>> >>>>>>>> AjaxDownload is an Ajax behavior that you can use to trigger the >>>>>>>> creation >>>>>>>> of the files and by using its callback methods you can show feedback >>>>>>>> to >>>>>>>> >>>>>>> the >>>>>>> >>>>>>>> user. To show progress bar you will need to employ ProgressBar from >>>>>>>> wicket-extentions or use WebSockets. >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Mar 22, 2017 at 6:53 PM, Martin Grigorov < >>>>>>>>> >>>>>>>>> [email protected]> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>> Hi Maxim, >>>>>>>>>> >>>>>>>>>> I use the new AjaxDownload with a ResourceReference, i.e. >>>>>>>>>> AjaxDownload#AjaxDownload(org.apache.wicket.request. >>>>>>>>>> resource.ResourceReference, >>>>>>>>>> org.apache.wicket.request.mapper.parameter.PageParameters) >>>>>>>>>> The ResourceReference has >>>>>>>>>> >>>>>>>>>> public IResource getResource() { >>>>>>>>>> return new StatementDownloadResource(); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> StatementDownloadResource extends ResourceStreamResource and >>>>>>>>>> provides >>>>>>>>>> implementation of #getResourceStream(). There I have a logic that >>>>>>>>>> >>>>>>>>> returns >>>>>>>> >>>>>>>> either FileResourceStream or ZipResourceStream. >>>>>>>>>> >>>>>>>>>> Martin Grigorov >>>>>>>>>> Wicket Training and Consulting >>>>>>>>>> https://twitter.com/mtgrigorov >>>>>>>>>> >>>>>>>>>> On Wed, Mar 22, 2017 at 12:30 PM, Maxim Solodovnik < >>>>>>>>>> >>>>>>>>> [email protected] >>>>>>>> >>>>>>>> wrote: >>>>>>>>>> >>>>>>>>>> Just have tried to switch to this AjaxDownload component >>>>>>>>>>> >>>>>>>>>>> And it seems I cannot find proper way to use it with dynamic >>>>>>>>>>> file, >>>>>>>>>>> >>>>>>>>>> i.e. >>>>>>>> >>>>>>>> previously >>>>>>>>>>> >>>>>>>>>>> I created AjaxDownload, >>>>>>>>>>> added it to the page >>>>>>>>>>> then at the moment I know what file should be served, I set the >>>>>>>>>>> >>>>>>>>>> stream >>>>>>>> >>>>>>>> and >>>>>>>>>>> >>>>>>>>>>> initiate the download >>>>>>>>>>> (for example one of use cases: I need to create zip file >>>>>>>>>>> >>>>>>>>>>> right now this seems to be impossible :( >>>>>>>>>>> Can you give me a hint how this dynamic nature can be >>>>>>>>>>> implemented? >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> WBR >>>>>>>>>>> Maxim aka solomax >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> -- >>>>>>>>> WBR >>>>>>>>> Maxim aka solomax >>>>>>>>> >>>>>>>>> >>>>>>> -- >>>>>>> WBR >>>>>>> Maxim aka solomax >>>>>>> >>>>>>> >>>>> -- >>>>> WBR >>>>> Maxim aka solomax >>>>> >>>> >>>> > -- WBR Maxim aka solomax
