Thierry,

This work-around is perfect for my current needs, thanks.

-Matt

On Nov 19, 2009, at 4:29 AM, Thierry Boileau wrote:

> 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

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

Reply via email to