Hi, Thanks for the quick replies. I will try to implement it.
Regarding ChenilleKit JARs. I have added this dependency to build.gradle: compile 'org.chenillekit:chenillekit-tapestry:1.3.3' which brings in these files. chenillekit-core-1.3.3, chenillekit-google-1.3.3, chenillekit-image-1.3.3, chenillekit-tapestry-1.3.3 The deployed version only contains one copy of each of these JARs. The full stacktrace is java.lang.RuntimeException: Service id 'KaptchaProducer' has already been defined by org.chenillekit.image.ChenilleKitImageModule.buildKaptchaProducer(Map) (at ChenilleKitImageModule.java:38) and may not be redefined by org.apache.tapestry5.kaptcha.internal.services.KaptchaProducerImpl(Map) (at KaptchaProducerImpl.java:34) via org.apache.tapestry5.kaptcha.modules.KaptchaModule.bind(ServiceBinder) (at KaptchaModule.java:39). You should rename one of the service builder methods. at org.apache.tapestry5.ioc.internal.RegistryImpl.<init>(RegistryImpl.java:186) at org.apache.tapestry5.ioc.RegistryBuilder.build(RegistryBuilder.java:181) at org.apache.tapestry5.internal.TapestryAppInitializer.createRegistry(TapestryAppInitializer.java:175) at org.apache.tapestry5.TapestryFilter.init(TapestryFilter.java:103) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:107) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4775) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5452) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Best regards, Balazs On 25 February 2015 at 02:51, Geoff Callender < geoff.callender.jumpst...@gmail.com> wrote: > In the following code, I made ImageInlineStreamResponse by extending > InlineStreamResponse from > http://wiki.apache.org/tapestry/Tapestry5HowToStreamAnExistingBinaryFile. > > public ImageInlineStreamResponse getPictureAsImageStream(Integer > someId) throws FileNotFoundException { > > File file = toFileUsingMySecretPathAlgorithm(someId); > > return new ImageInlineStreamResponse(file); > } > > > ImageInlineStreamResponse calls super(file), then sets the contentType > appropriately, eg. this.contentType = "image/jpeg". > > Two modifications to InlineStreamResponse : > > - add this constructor: > > public InlineStreamResponse(File file) throws > FileNotFoundException { > this.is = new FileInputStream(file); > this.filename = file.getName(); > } > > - in prepareResponse(...), add this: > > // Set content length to prevent chunking - see > // > http://tapestry-users.832.n2.nabble.com/Disable-Transfer-Encoding-chunked-from-StreamResponse-td5269662.html#a5269662 > try { > response.setHeader("Content-Length", "" + > is.available()); > } > catch (IOException e) { > // Aaaaaaarrrrrrrrrggggggggggghhhhhhhhh! > Unrecoverable? Client will simply fail to receive the file. > e.printStackTrace(); > } > > HTH, > > Geoff > > On 25 Feb 2015, at 11:58 am, Thiago H de Paula Figueiredo < > thiag...@gmail.com> wrote: > > > On Tue, 24 Feb 2015 20:29:44 -0300, Balázs Palcsó < > palcso.bal...@gmail.com> wrote: > > > >> Hi, > > > > Hi! > > > >> I am developing an application that allows uploading images with > tapestry > >> 5.4-beta-28. > >> > >> My plan is to store the uploaded files on the file system. I have > managed > >> to implement this bit, but I am struggling to come up with a solution to > >> show the uploaded images. > > > > I prefer some kind of database, as storing files in the filesystem can > be a pain and serving them can be a serious security risk, but that's not > the point of this message. :) > > > >> I am getting an error if I include ChenilleKit Tapestry in the classpath > >> Service id 'KaptchaProducer' has already been defined by > >> org.chenillekit.image.ChenilleKitImageModule.buildKaptchaProducer(Map) > > > > This means there's two ChenilleKit JARs in the classpath. Or two > different module classes defining a service with the same id, but you've > cut off the error message, so it's not possible to know. > > > > -- > > Thiago H. de Paula Figueiredo > > Tapestry, Java and Hibernate consultant and developer > > http://machina.com.br > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > > For additional commands, e-mail: users-h...@tapestry.apache.org > > > >