This seems like adding a large amount of overhead to an image-heavy site (e.g. image blog or something), I thought I read in Wicket in Action that WicketFilter ignored HTTP requests for non-wicket resources now and passed them through to the underlying server to handle avoiding the need to remap your wicket URLs to something like /app/* so you could have /images and other resources under root and not have them go through the filter.
Is this not the case? On Wed, Jan 27, 2010 at 1:38 PM, Ernesto Reinaldo Barreiro < reier...@gmail.com> wrote: > Hi Francois, > > Following example works..... > > 1-Create this class anywhere you want need. > > package com.antilia.demo.manager.img; > > import java.io.ByteArrayOutputStream; > import java.io.File; > import java.io.FileInputStream; > import java.io.IOException; > import java.io.InputStream; > import java.io.OutputStream; > > import org.apache.wicket.AttributeModifier; > import org.apache.wicket.markup.html.image.Image; > import org.apache.wicket.markup.html.image.resource.DynamicImageResource; > import org.apache.wicket.model.Model; > import org.apache.wicket.protocol.http.WebApplication; > import org.apache.wicket.protocol.http.WebRequestCycle; > import org.apache.wicket.util.file.Folder; > > /** > * > * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) > * > */ > public abstract class MountedImageFactory { > > > static int BUFFER_SIZE = 10*1024; > /** > * Copies one stream into the other.. > * @param is source Stream > * @param os destination Stream > * */ > static public void copy(InputStream is, OutputStream os) throws IOException > { > byte[] buf = new byte[BUFFER_SIZE]; > while (true) { > int tam = is.read(buf); > if (tam == -1) { > return; > } > os.write(buf, 0, tam); > } > } > public static byte[] bytes(InputStream is) throws IOException { > ByteArrayOutputStream out = new ByteArrayOutputStream(); > copy(is, out); > return out.toByteArray(); > } > private static ImageFromFolderWebResource dynamicResource; > private static class ImageFromFolderWebResource extends > DynamicImageResource { > private static final long serialVersionUID = 1L; > > private File folder; > public ImageFromFolderWebResource(File folder, String mountPoint) { > this.folder = folder; > WebApplication.get().getSharedResources().add(mountPoint, this); > WebApplication.get().mountSharedResource(mountPoint, > "org.apache.wicket.Application/"+mountPoint); > } > @Override > protected byte[] getImageData() { > try { > String name = WebRequestCycle.get().getRequest().getParameter("name"); > return bytes(new FileInputStream(new File(getFolder().getAbsolutePath() + > System.getProperty("file.separator")+(name)))); > } catch (Exception e) { > //TODO: do this properly > return null; > } > } > > public File getFolder() { > return folder; > } > } > /** > * @return Folder from where images will be retrieved. > */ > protected abstract Folder getFolder(); > /** > * @return the URL to mount the dynamic WEB resource.e.g. > */ > protected abstract String getMountPoint(); > public Image createImage(String id, final String imageName) { > if(dynamicResource == null) > dynamicResource = new ImageFromFolderWebResource(getFolder(), > getMountPoint()); > return new Image(id) { > private static final long serialVersionUID = 1L; > > @Override > protected void onBeforeRender() { > String path = WebRequestCycle.get().getRequest().getURL(); > path = path.substring(0, path.indexOf('/')); > add(new AttributeModifier("src",true, new > Model<String>("/"+path+"/"+getMountPoint()+"?name="+imageName))); > super.onBeforeRender(); > } > }; > } > } > > 2- Create a test page. > > import org.apache.wicket.markup.html.WebPage; > import org.apache.wicket.markup.html.image.Image; > import org.apache.wicket.util.file.Folder; > > /** > * @author Ernesto Reinaldo Barreiro (reier...@gmail.com) > * > */ > public class TestPage extends WebPage { > > private static final MountedImageFactory IMAGE_FACTORY = new > MountedImageFactory() { > @Override > protected Folder getFolder() { > return new Folder("C:/temp/images"); > } > @Override > protected String getMountPoint() { > return "test"; > } > }; > /** > * > */ > public TestPage() { > Image img = IMAGE_FACTORY.createImage("img", "test.png"); > add(img); > } > } > > and the HTML markup > > <html xmlns:wicket="org.apache.wicket"> > <head></head> > <body> > <img wicket:id="img" alt="Test"/> > </body> > </html> > > 3- If you place a "test.png" on your "C:/temp/images" then you should be > able to see the image when you hit the page. > > Hope you can adapt this to your needs? > > Regards, > > Ernesto > > 2010/1/27 François Meillet <fm...@meillet.com> > > > Thank for yours posts. > > I try the solutions, but I can't figure out how to serve images as > static > > images. > > F. > > > > Le 27 janv. 2010 à 16:10, Thomas Kappler a écrit : > > > > > On 01/27/10 15:57, Jonas wrote: > > >> Have you tried the following: > > >> > > >> WebComponent image = new WebComponent("someWicketId"); > > >> image.add(new SimpleAttributeModifier("src", "http://.....jpg")); > > >> add(image); > > >> > > >> with markup > > >> > > >> <img wicket:id="someWicketId" /> > > >> > > >> > > >> that should work just fine... > > >> > > >> if you cannot hardcode the image url, you can use the following > > >> instead of SimpleAttributeModifier > > >> image.add(new AttributeModifier("src", true new > > >> AbstractReadOnlyModel<String>() { > > >> public String getObject() { > > >> String url = ... (fetch the image url from anywhere else) > > >> // e.g. '/xxx/yyyy/image893748.png' > > >> return url; > > >> } > > >> )); > > > > > > Or, maybe a bit nicer, encapsulate it into a component and let the URI > > come from a Model, as usual in Wicket: > > > > > > class ExternalImageUri > > > extends WebComponent > > > { > > > public ExternalImageUri(String id, IModel<String> uri) > > > { > > > super(id, uri); > > > add(new AttributeModifier("src", true, uri)); > > > } > > > > > > @Override > > > protected void onComponentTag(ComponentTag tag) > > > { > > > super.onComponentTag(tag); > > > checkComponentTag(tag, "img"); > > > } > > > } > > > > > > > > > This in the Wiki at > > http://cwiki.apache.org/WICKET/how-to-load-an-external-image.html. > > > > > > > > > -- Thomas > > > > > > > > >> 2010/1/27 François Meillet<fm...@meillet.com>: > > >>> Hi Wicketers, > > >>> > > >>> I have a directory, /xxx/images with uploaded images, which is not > > under the application context root directory. > > >>> How can I serve them as static images ? > > >>> > > >>> I tried the StaticImage class I found in the forum ( > > http://old.nabble.com/Plain-IMG-src-urls-td21547371.html#a21547543 ) > > >>> but it doesn't work for me. It just work if the image files are under > > the context root directory. > > >>> > > >>> Thanks for your help. > > >>> > > >>> François > > >>> > > >>> > > >>> > > >>> > > >>> --------------------------------------------------------------------- > > >>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > >>> For additional commands, e-mail: users-h...@wicket.apache.org > > >>> > > >>> > > >> > > >> --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > >> For additional commands, e-mail: users-h...@wicket.apache.org > > >> > > > > > > > > > -- > > > ------------------------------------------------------------------- > > > Thomas Kappler thomas.kapp...@isb-sib.ch > > > Swiss Institute of Bioinformatics Tel: +41 22 379 51 89 > > > CMU, rue Michel Servet 1 > > > 1211 Geneve 4 > > > Switzerland http://www.uniprot.org > > > ------------------------------------------------------------------- > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > > > > François Meillet > > fm...@meillet.com > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org > > For additional commands, e-mail: users-h...@wicket.apache.org > > > > >