Home
english
Home
WebDAV Server
WebDAV Client
WebDAV AJAX
Map Drive
Pricing
News
Contacts
info@ithit.com



Resumable Upload

Resumable upload interfaces provides reliable mechanism of uploading large files to WebDAV server and managing long-lasting uploads. After implementing resumable upload feature you will be able to pause \ resume uploads, restore broken uploads, report upload progress and create upload progress bars.

To handle upload in your server implementation you must implement IResumableUpload and IUploadProgress interfaces on a resource items. IResumableUpload provides its own SaveFromStream method that will be always called instead of IResource.SaveFromStream. Here is the example of IResumableUpload.SaveFromStream method implementation:

public WebDAVResponse SaveFromStream(long startIndex, long totalContentLength, Stream segment, string contentType)

{

    long segmentSize = 0;

    try

    {

        segmentSize = SaveContent(segment, contentType, totalContentLength, startIndex); // save segment and totalContentLength

    }

    catch (HttpListenerException)

    {

        // connection broken or closed by client

    }

 

    if (startIndex + segmentSize < totalContentLength)

    {

        return new ResumeIncompleteResponse(); // more segments expected

    }

    else if (segmentSize > 0)

    {

        return new OkResponse(); // all segments received

    }

    else

    {

        return new NoContentResponse(); // content truncated to zero

    }

}

In this method you will save segments of file content in your persistent storage. The engine passes 2 additional parameters to this method - index in file to which corresponds first byte in content parameter and total size of the resource being uploaded. You will also save totalContentLength in your persistent storage. You will later return value of this parameter from IResumableUpload.TotalContentLength property implementation.

From your IResumableUpload.SaveFromStream implementation you will return ResumeIncompleteResponse in case when more segments are expected to arrive.

Note that if you implement IResumableUpload, IFolder.CreateResource method will always receive null stream and content will be always passed to IResumableUpload.SaveFromStream method.

From your IUploadProgress.UploadProgress implementation on resource items you will return array with only 1 item - this resource:

IResumableUpload[] IUploadProgress.UploadProgress

{

    get

    {

        IResumableUpload[] items = new IResumableUpload[1];

        items[0] = this;

        return items;

    }

}

For each item from the array the engine will request Path, LastChunkSaved, BytesUploaded, TotalContentLength and submit this info to client application.

Optionally you can implement IUploadProgress interface on folder items. In this case you will return array of items that are being uploaded to server. Here is the typical class diagram in this case:


What WebDAV software would you like to have?

Selected Customers:
Country: Norway
DnB NOR Group
Country: Finland
Bank of Finland
Country: United Kingdom
Bechtle Direct
Country: Sweden
BT Industries
Country: USA
California Chamber of Commerce
Country: Denmark
Danfoss Group
Country: Denmark
DFDS
Country: USA
Fluke Networks
Country: USA
HNI Corporation
Country: USA
IHS Inc
Country: USA
LandAmerica Financial Group
Country: Canada
Laurentian University
Country: USA
Microsoft
Country: Israel
RADVISION
Country: Ukraine
Raiffeisen Bank
Country: Netherlands
Sanoma Uitgevers
Country: USA
Siemens
Country: Australia
WorkCover NSW
Country: Ukraine
OTP Bank
Country: USA
Intel Corporation
Country: Austria
Austrian Federal Railways
Home WebDAV Server WebDAV Client WebDAV AJAX Map Drive Pricing News Contacts

Updated: Saturday, October 25, 2008