Working with WEBDAV

Working with WEBDAV

West-Life File picker and Upload-Dir picker components return URL capable of WEBDAV API which doesn't need any other type of authentication. Use this URL as confidential as possible. WEBDAV is HTTP extension, it supports basic HTTP VERBS to download file ('GET'), upload file ('PUT'), delete file ('DELETE') as well as extension to list resources ('PROPFIND') in a directory or directories. It is possible to use WEBDAV capable client application to connect to the selected folder or download selected file. Following sections contains samples how to download or upload file to Virtual Folder using WEBDAV API using scripting or compiled languages. Full samples can be downloaded

Bash, CURL

Prerequisite: install curl using your OS package manager yum install curl or apt-get install curl. cURL is command-line tool for transferring data using various protocols available as standard package in most OS.

Bash script to UPLOAD file to the webdav URL

curl -X PUT [updirurl+filename] --data "any text content"

Bash script to DOWNLOAD file from the webdav URL

curl [updirurl+filename] --data "any text content"

Download full sample script

Python

Prerequisite:

  • for Python 2.x install easywebdav using your favorite packaging system(pip install easywebdav)

  • for Python 3.x download easywebdav from here.

import easywebdav;

if sys.argv[1] == 'PUT':
    url = urlparse(sys.argv[2]);
    webdav = easywebdav.connect(url.hostname,protocol=url.scheme,path=url.path);
    print("Uploading ", sys.argv[3], " to ", sys.argv[2]);
    webdav.upload(sys.argv[3], sys.argv[3]);
else:
    url = urlparse(sys.argv[1]);
    webdav = easywebdav.connect(url.hostname,protocol=url.scheme,path=url.path);
    print("Downloading ",sys.argv[2]," from ", sys.argv[1]);
    webdav.download(sys.argv[2], sys.argv[2]);

Download full sample scripts

Javascript [Draft]

Not yet verified. The following code uses XMLHTTPRequest API.

function ajaxrequest(method, url, callback,contentdivid,content) {
    var request;
    // compatible with IE7+, Firefox, Chrome, Opera, Safari
    request = new XMLHttpRequest();
    request.onreadystatechange = function(){
        if (request.readyState == 4 && request.status == 200){
            callback(request.responseText,contentdivid);
        } else {
            console.log(request.response)
            alert('There was an error. See console. ');
        }
    }
    request.open(method, url, true);
    request.send(content);
}

function downloadcallback(responsetext,contentdivid) {
    document.getElementById(contentdivid).innerHTML = responsetext;
}

function uploadcallback(responsetext,contentdivid) {
    document.getElementById(contentdivid).innerHTML = "Upload OK.";
}

function downloadwebdavfile(url,contentdivid) {
    ajaxrequest("GET",url, downloadcallback,contentdivid)
}

function uploadwebdavfile(url,contentdivid,content) {
    ajaxrequest("PUT",url,uploadcallback,content)
}

.NET [Draft]

Standard HttpWebRequest class use used

        public static string Put(string url, string filename, string content)
        {
            string log = "";
            try
            {
                // Create an HTTP request for the URL.
                HttpWebRequest httpPutRequest =
                    (HttpWebRequest) WebRequest.Create(url+'/'+filename);
                httpPutRequest.PreAuthenticate = false;                
                httpPutRequest.Method = @"PUT";                
                httpPutRequest.Headers.Add(@"Overwrite", @"T");                
                httpPutRequest.ContentLength = content.Length;                
                httpPutRequest.SendChunked = true;                
                Stream requestStream = httpPutRequest.GetRequestStream();
                requestStream.Write(
                    Encoding.UTF8.GetBytes((string) content),
                    0, content.Length);

                requestStream.Close();

                HttpWebResponse httpPutResponse =
                    (HttpWebResponse) httpPutRequest.GetResponse();                
                log += @"PUT Response: " + httpPutResponse.StatusDescription;
                return log;
            }
            catch (Exception e)
            {

                Console.WriteLine("PUT Response: Exception" + e.Message + " StackTrace:" + e.StackTrace);
                throw e;
            }

        }

Java [Draft]

In preparation.

//webdav client sample

References:

HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV): tools.ietf.org/html/rfc4918

XMLHttpRequest Living Standard: https://xhr.spec.whatwg.org/

easywebdav 1.2.0 A straight-forward WebDAV client, implemented using Requests https://pypi.python.org/pypi/easywebdav

cURL, https://curl.haxx.se/docs/

Last updated