Home
english
Home
.NET Server
Java Server
.NET Client
AJAX Client
AJAX Browser
Map Drive
Pricing
Contacts
info@ithit.com



Displaying Upload Progress with JavaScript WebDAV Library

If your server runs IT Hit WebDAV Server Engine with implemented Resumable Upload feature you can request amount of bytes uploaded to server and total size of file being uploaded.

Probing Resumable Upload Support

To detect if item supports Resumable Upload feature probe the ResumableUpload bit in Features enumeration:

var oNS = ITHit.WebDAV.Client;

var session = new oNS.WebDavSession();

var resource = session.OpenItem("http://server/LargeFile.exe");

var resumableUploadSupported = (resource.SupportedFeatures().Features & oNS.Features.ResumableUpload) == 0;

Getting Upload Progress

To get number of bytes uploaded to server and entire file length use the HierarchyItem.GetUploadProgress() method that returns array of UploadProgressInfo objects. If GetUploadProgress is called for file the array will contain a single object with info about this file upload progress. Use UploadProgressInfo.BytesUploaded and UploadProgressInfo.TotalContentLength to get ammout of bytes uploaded and total file size of file that is being uploaded:

var oNS = ITHit.WebDAV.Client;

var session = new oNS.WebDavSession();

var resource = session.OpenItem("http://server/LargeFile.exe");

var progress = resource.GetUploadProgress()[0];

var percent = 100 * progress.BytesUploaded / progress.TotalContentLength;

Creating JavaScript Upload Progress Bar

The example below demonstrates creation of JavaScript upload progress bar using IT Hit WebDAV AJAX library:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

  <head>

    <title>Javascript Upload Progress & Cancel Upload</title>

    <script type="text/javascript" src="ITHitWebDAVClient.js" ></script>

   

    <script type="text/javascript">

        var file;

        var timerId;

        var resource;

 

        function prepareUpload()

        {

            document.getElementById("fileSize").innerHTML = "";

            document.getElementById("bytesUploaded").innerHTML = "";

            document.getElementById("percentUploaded").innerHTML = "";

            document.getElementById("uploadProgressBar").style.width = "0%";

 

            // get file name

            file = document.getElementById("fileBtn").value;

            if(file.lastIndexOf("\\")>=0)

                file = file.substr(file.lastIndexOf("\\")+1);

            document.getElementById("fileName").innerHTML = file;

 

            // get folder path

            var curFolder = window.location.href;

            if(curFolder[curFolder.length-1]!="/")

                curFolder = curFolder.substring(0, curFolder.lastIndexOf("/")+1);

 

            document.getElementById("target").innerHTML = curFolder;

            document.getElementById("frm").action = curFolder;

        }

 

        function formSubmit()

        {

            resource = null;

            timerId = setInterval("updateProgress()", 1000);

            document.getElementById("cancelUploadBtn").disabled = false;

            document.getElementById("uploadBtn").disabled = true;

        }

 

        function updateProgress()

        {

            if (resource == null)

            {

                var uploadTarget = document.getElementById("frm").action + file;

                var oNS = ITHit.WebDAV.Client;

                var session = new oNS.WebDavSession();

                try

                {

                    resource = session.OpenItem(uploadTarget);

                }

                catch(e)

                {

                    if (e instanceof oNS.Exceptions.NotFoundException)

                    { // the file is not yet created by server.

                        document.getElementById("bytesUploaded").innerHTML = "Waiting...";

                        return;

                    }

                    else

                        throw e;

                }

 

                // probe if server supports resumable upload

                if ((resource.SupportedFeatures().Features & oNS.Features.ResumableUpload) == 0)

                {

                    stopUpdatingProgress();

                    alert("Server does not support Resumable Upload feature.");

                    return;

                }

            }

 

            var progress = resource.GetUploadProgress()[0];

            var percent = 100 * progress.BytesUploaded / progress.TotalContentLength;

 

            document.getElementById("fileSize").innerHTML = progress.TotalContentLength + " bytes";

            document.getElementById("bytesUploaded").innerHTML = progress.BytesUploaded + " bytes";

            document.getElementById("percentUploaded").innerHTML = percent.toString().substr(0, 4) + " %";

            document.getElementById("uploadProgressBar").style.width = percent.toString() + "%";

 

            if (percent == 100)

                stopUpdatingProgress();

        }

 

        function cancelUpload()

        {

            // recreate iframe to cancel upload

            document.getElementById("uploadFrameHolder").innerHTML = "<iframe name='uploadFrame' ></iframe>";

            stopUpdatingProgress();

        }

 

        function stopUpdatingProgress()

        {

            clearInterval(timerId);

            document.getElementById("cancelUploadBtn").disabled = true;

            document.getElementById("uploadBtn").disabled = false;

        }

 

    </script>

  </head>

  <body>

    <span id="uploadFrameHolder" style="display:none"><iframe name="uploadFrame" ></iframe></span>

    <form id="frm" method="post" enctype="multipart/form-data" target="uploadFrame" onsubmit="formSubmit()">

        <input type="file" id="fileBtn" name="dummyname" onchange="prepareUpload()" /><br />

        <input type="submit" id="uploadBtn" value="Upload" />

    </form>

    <table>

        <tr><td>File Name: </td><td id="fileName"></td></tr>

        <tr><td>Upload Target: </td><td id="target"></td></tr>

        <tr><td>File Size: </td><td id="fileSize"></td></tr>

        <tr><td>Bytes Uploaded: </td><td id="bytesUploaded"></td></tr>

        <tr>

            <td>Upload Progress: </td>

            <td>

                <table>

                    <tr>

                        <td>

                            <div style="width:200px; height:10px; border: solid 1px black; font-size:0px">

                                <div id="uploadProgressBar" style=" background-color: gray; height:100%; width:0%"></div>

                            </div>

                        </td>

                        <td id="percentUploaded"></td>

                    </tr>

                </table>

            </td>

        </tr>

    </table>

   

    <input id="cancelUploadBtn" disabled="true" type="button" value="Cancel" onclick="cancelUpload()" />

  </body>

</html>


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 .NET Server Java Server .NET Client AJAX Client AJAX Browser Map Drive Pricing Contacts

Updated: Friday, November 28, 2008