You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Tiffany Dodge <ti...@ubermind.com> on 2006/08/24 21:19:00 UTC

PUT with Content-Range Header

Hello,

I recently read that Apache's mod_dav supports PUTs with the Content- 
Range header and I am interested in using it.

I am working on a non-gui client app that uses slide.  I added a new  
put method to slide (to WebdavResource.java, specifically) that adds  
the Content-Range header.  Basically, I copied one of the existing  
put methods (the one that takes a path and file argument) and just  
added the bit of code that adds the Content-Range header.  It did not  
work; webdav had the full file (not the chunk specified).  I was  
wondering if anyone else had tried this and if they had been  
successful?  Here are the headers from the test I used ....

request headers ...

[DEBUG] wire - ->> "PUT /blahDir/blah.aes HTTP/1.1[\r][\n]"
[DEBUG] wire - ->> "Content-Range: bytes 0-524288/2945360[\r][\n]"
[DEBUG] wire - ->> "Content-Type: httpd/unix-directory[\r][\n]"
[DEBUG] wire - ->> "User-Agent: Jakarta Commons-HttpClient/2.0final 
[\r][\n]"
[DEBUG] wire - ->> "Host: blah.blah.com[\r][\n]"
[DEBUG] wire - ->> "Content-Length: 2945360[\r][\n]"
[DEBUG] wire - ->> "[\r][\n]"

response headers ...

[DEBUG] wire - -<< "HTTP/1.1 201 Created[\r][\n]"
[DEBUG] wire - -<< "Date: Thu, 24 Aug 2006 01:31:52 GMT[\r][\n]"
[DEBUG] wire - -<< "Server: Apache/1.3.33 (Darwin) PHP/5.1.2  
mod_fastcgi/2.4.2 DAV/1.0.3 mod_ssl/2.8.24 OpenSSL/0.9.7i[\r][\n]"
[DEBUG] wire - -<< "Cache-Control: max-age=60[\r][\n]"
[DEBUG] wire - -<< "Expires: Thu, 24 Aug 2006 01:32:52 GMT[\r][\n]"
[DEBUG] wire - -<< "Connection: close[\r][\n]"
[DEBUG] wire - -<< "Transfer-Encoding: chunked[\r][\n]"
[DEBUG] wire - -<< "Content-Type: text/html[\r][\n]"

Any help would be appreciated.

Thanks,
Tiff



---------------------------------------------------------------------
To unsubscribe, e-mail: slide-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-user-help@jakarta.apache.org


Re: [SOLVED] PUT with Content-Range Header

Posted by Tiffany Dodge <ti...@ubermind.com>.
Hello,

I cannot post the actual code I added to slide to get this to work,  
but I will verbally describe what I did.  This fix/patch will only  
work with webdav servers that support the Content-Range header for  
PUTs.  At the moment, I only know of Apache's mod_dav that supports  
it, but that doesn't mean others don't.  Also, I have only tested  
this with Apache's mod_dav.  Here's the specifics on what I am using:

Slide 2.1
Apache/1.3.33 (Darwin)
DAV/1.0.3

In WebdavResource.java, I copied the method 'public boolean putMethod 
(String path, byte[] data)', renamed it to putPartialMethod, and  
added three more arguments to it: the beginning index, the ending  
index, and the full length of the file/resource.  In the method, I  
keep everything exactly the same but add a few lines to add the  
Content-Range header.  Here are the rules about the Content-Range  
header: http://www.w3.org/Protocols/rfc2616/rfc2616- 
sec14.html#sec14.16 .

The caller of putPartialMethod should only pass the chunk of the file/ 
resource that should be uploaded.  And the data argument's length  
should be the exact length of the chunk being uploaded.  So the data  
argument's length should be (ending index - beginning index + 1).   
That's about it.  Here's a few items to remember when using the  
putPartialMethod ....

- The beginning and ending indexes are inclusive.  So, if you upload  
bytes 4-7 of a file with length 9, then bytes 4, 5, 6, and 7 will be  
uploaded.  http://www.w3.org/Protocols/rfc2616/rfc2616- 
sec14.html#sec14.16 has an example.
- The ending index cannot be equal to the full file's length.  So, if  
a file's length is 9 and you want to upload all the bytes, then the  
beginning index would be 0 and the ending index would be 8.

We have found the putPartialMethod to be useful for resumed uploads  
and for logging a file's upload progress.  We upload a chunk of a  
file, log the progress, upload a chunk, log the progress, etc.

Hope that helps,
Tiff

On Aug 24, 2006, at 12:19 PM, Tiffany Dodge wrote:

> Hello,
>
> I recently read that Apache's mod_dav supports PUTs with the  
> Content-Range header and I am interested in using it.
>
> I am working on a non-gui client app that uses slide.  I added a  
> new put method to slide (to WebdavResource.java, specifically) that  
> adds the Content-Range header.  Basically, I copied one of the  
> existing put methods (the one that takes a path and file argument)  
> and just added the bit of code that adds the Content-Range header.   
> It did not work; webdav had the full file (not the chunk  
> specified).  I was wondering if anyone else had tried this and if  
> they had been successful?  Here are the headers from the test I  
> used ....
>
> request headers ...
>
> [DEBUG] wire - ->> "PUT /blahDir/blah.aes HTTP/1.1[\r][\n]"
> [DEBUG] wire - ->> "Content-Range: bytes 0-524288/2945360[\r][\n]"
> [DEBUG] wire - ->> "Content-Type: httpd/unix-directory[\r][\n]"
> [DEBUG] wire - ->> "User-Agent: Jakarta Commons-HttpClient/2.0final 
> [\r][\n]"
> [DEBUG] wire - ->> "Host: blah.blah.com[\r][\n]"
> [DEBUG] wire - ->> "Content-Length: 2945360[\r][\n]"
> [DEBUG] wire - ->> "[\r][\n]"
>
> response headers ...
>
> [DEBUG] wire - -<< "HTTP/1.1 201 Created[\r][\n]"
> [DEBUG] wire - -<< "Date: Thu, 24 Aug 2006 01:31:52 GMT[\r][\n]"
> [DEBUG] wire - -<< "Server: Apache/1.3.33 (Darwin) PHP/5.1.2  
> mod_fastcgi/2.4.2 DAV/1.0.3 mod_ssl/2.8.24 OpenSSL/0.9.7i[\r][\n]"
> [DEBUG] wire - -<< "Cache-Control: max-age=60[\r][\n]"
> [DEBUG] wire - -<< "Expires: Thu, 24 Aug 2006 01:32:52 GMT[\r][\n]"
> [DEBUG] wire - -<< "Connection: close[\r][\n]"
> [DEBUG] wire - -<< "Transfer-Encoding: chunked[\r][\n]"
> [DEBUG] wire - -<< "Content-Type: text/html[\r][\n]"
>
> Any help would be appreciated.
>
> Thanks,
> Tiff
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: slide-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-user-help@jakarta.apache.org