Hello Matt,

the current directory is based on a mapping between extensions and media 
types (see the javadoc of the method MetadataService#addCommonExtensions).
At this time, the extensions "jpe", "jpg", "jpeg" are all mapped with 
the media type "MediaType.IMAGE_JPEG", with a preference for the first 
one. This can be updated by calling the #addExtension(String, Metadata, 
boolean) method.
This mapping does clearly not define a bijection, which leads to your 
reported errors, in case the served directory contains already files 
with "unpreferred" extensions such as "jpg" and "jpeg".
I've entered an issue for this: 
http://restlet.tigris.org/issues/show_bug.cgi?id=953.

Best regards,
Thierry Boileau

> I have found some behavior that I think is incorrect when a jpeg is 
> PUT to a Directory.  I wrote a test server in groovy and a client in 
> curl to illustrate the problem, see below.  In summary, when a jpeg 
> image is PUT into a Directory resource with a URL like 
> http://host:port/tmp.jpg, the file extension gets changed to .jpe.  A 
> subsequent retrieval of the same URL does work, but directory listings 
> show the "wrong" file name.  Similarly, and the reason this is a 
> problem for me, other programs that run on the server need to deal 
> with the files with the same name that users PUT as the resource 
> name.  In this case, I need users to be able to overwrite a file 
> called tmp.jpg that already exists in the directory. Instead, I wind 
> up with two files, tmp.jpg and tmp.jpe.  When the user subsequently 
> request http://host:port/tmp.jpg immediately after they perform a PUT, 
> they get the original image back, not the one that they just PUT to 
> the system to replace the original.
>
> I suspect this might happen with other media types that have multiple 
> valid extensions.
>
> I am testing against 2.0m5 for jse.  I tried to test this with a 
> recent checkout from svn, but building yielded some gwt errors I don't 
> know how to work around.
>
> Is this a configuration problem on my end?  Or could this be a bug?
>
> Thanks for your time,
> Matt
>
> //Groovy test server, I can rewrite this is java if necessary.
> import org.restlet.*;
> import org.restlet.resource.Directory;
> import org.restlet.data.Protocol;
>
> class TestDirApp extends Application
> {
>   @Override
>   public Restlet createInboundRoot()
>   {
>     def dir = new Directory(getContext(), 'file:///tmp')
>     dir.modifiable = true;
>     //dir.negotiateContent = false; //NB have tried this both ways
>     println("Negotiating: ${dir.isNegotiateContent()}");
>     dir.listingAllowed = true;
>     return dir;
>   }
> }
>
> def component = new Component();
> Server http = component.servers.add(Protocol.HTTP, 8181);
> component.clients.add(Protocol.FILE);
> Context workingCtx = http.context;
> def app = new TestDirApp();
> component.defaultHost.attach(app);
> component.start();
>
>
> #curl client
> curl -i --request PUT --data-binary "@tmp.jpg" --header "Content-Type: 
> image/jpeg" "http://localhost:8181/tmp.jpg";
> HTTP/1.1 201 The request has been fulfilled and resulted in a new 
> resource being created
> Content-Length: 0
> Date: Tue, 17 Nov 2009 16:23:00 GMT
> Accept-Ranges: bytes
> Server: Restlet-Framework/2.0m5
> Connection: close
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2419969

Reply via email to