Peter Kanze schrieb:
Hi Andy,

Yes I read that thread, I started that thread as well.
I will vote for the issue, but the problem is I need a solution now..

Maybe I add a good old servlet that returns the image....
Any other ideas?



Yeah, that was my workaround.



Regards,
Peter


On Wed, Mar 11, 2009 at 12:49 PM, Andy Pahne <andy.pa...@googlemail.com>wrote:

Did you read the thread "How to load image Asset from filesystem"?

You might want to vote for the issue.

Regards,
Andy


Peter Kanze schrieb:

 Here am I again.
I am struggling for 2 days now to load an image from the filesystem into
my
webpage.
The image needs to be loaded based on the product id.

The steps I did was:

1. Implemented a FileSystemAssetFactory based on the ClasspathAssetFactory
2. Implemented a FileSystemResource;
See the code below:
In my html the following code is generated:

<img src="

/advertaza/assets/classpath/6675930334be219a/C:/tmp/pictures/8/71/1001/thumb1.jpg
" alt=""/>

As you can see the file system path is exposed into the webpage. I don't
want this.
The second problem is that the image is not loaded/visible in the webpage.

What am I doing wrong? Are there tapestry guru's who can help me out?

Thanks,
Peter

/*
*My quick example code
*/

public String getThumbnailPath() {
        Asset asset = assetSource.getAsset(null,
"file:/8/71/1001/thumb1.jpg", null);
        return asset.toClientURL();
   }
public class FileSystemAssetFactory implements AssetFactory {

   private final ClasspathAssetAliasManager aliasManager;

   private final Map<Resource, String> resourceToDefaultPath =
CollectionFactory.newConcurrentMap();

   private final FileSystemResource rootResource;

   private final AssetPathConverter converter;

   private final boolean invariant;


   public FileSystemAssetFactory(ClasspathAssetAliasManager aliasManager,
AssetPathConverter converter) {
       this.aliasManager = aliasManager;
       this.converter = converter;

       rootResource = new FileSystemResource("C:/tmp/pictures/");
       invariant = converter.isInvariant();
   }


   private String clientURL(Resource resource) {
       String defaultPath = resourceToDefaultPath.get(resource);

       if (defaultPath == null) {
           defaultPath = buildDefaultPath(resource);

           resourceToDefaultPath.put(resource, defaultPath);
       }

       return converter.convertAssetPath(defaultPath);
   }

   private String buildDefaultPath(Resource resource) {
       //boolean requiresDigest = cache.requiresDigest(resource);

       String path = resource.getPath();
       int lastdotx = path.lastIndexOf('.');
       path = path.substring(0, lastdotx + 1)  + path.substring(lastdotx);

         return aliasManager.toClientURL(path);
   }

   public Asset createAsset(final Resource resource) {
       return new AbstractAsset(invariant) {
           public Resource getResource() {
               return resource;
           }

           public String toClientURL() {
               return clientURL(resource);
           }
       };
   }

   public Resource getRootResource() {
       return rootResource;
   }

}

public class FileSystemResource extends AbstractResource {

   private static final int PRIME = 37;

   /**
    * Constructor with the root path
    * @param path the root
    */
   public FileSystemResource(String path) {
       super(path);
   }

   /**
    *
    */
   @Override
   protected Resource newResource(String path) {
       return new FileSystemResource(path);
   }

   @Override
   public URL toURL() {
       String filePath = getPath();
       File file = new File(filePath);

       if (file != null && file.exists()) {
           try {
               return file.toURL();
           }
           catch (MalformedURLException ex) {
               throw new RuntimeException(ex);
           }
       }
       return null;
   }

   @Override
   public String toString() {
       return getPath();
   }

   @Override
   public int hashCode() {
       return PRIME * getPath().hashCode();
   }

   @Override
   public boolean equals(Object obj) {
       if (this == obj)
           return true;
       if (obj == null)
           return false;
       if (getClass() != obj.getClass())
           return false;

       final FileSystemResource other = (FileSystemResource) obj;

       return getPath().equals(other.getPath());
   }

}



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org





---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org

Reply via email to