[owncloud-devel] Unable to upload files in chunks on ownCloud server using C#

RAHUL JAIN rahuljain840 at gmail.com
Sun Jun 7 09:22:40 GMT 2015

Hi All,

I am trying to upload file in chunks on ownCloud on-premise server using
ASP.NET C#. I have tried all my ways to upload file in chunks but each time
my chunk data is overwrite on previous chunk data.

I am unable to append my chunk on previously uploaded chunk. I am using
plUpload to send files in chunk. And i have created an handler which is
called each time a chunk is uploaded here is the code that runs to upload
the chunk. I know i am missing some headers to inculde in code which must
be required to submit data in chunks.
Below is my code to submit data on ownCloud server.

Source code used:

public void Upload(Stream chunkStream, String remoteFilePath, object state)
            Uri uploadUri = getServerUrl(remoteFilePath, false);
            string method = WebRequestMethods.Http.Put.ToString();

            var content = ReadFully(chunkStream);

            AsyncCallback callback = new AsyncCallback(FinishUpload);

            // Need to send along headers?
            IDictionary<string, string> headers = new Dictionary<string,
            headers.Add("OC_Chunked", "1");

            HTTPRequest(uploadUri, method, headers, content, localFilePath,
callback, state, true);

void HTTPRequest(Uri uri, string requestMethod, IDictionary<string, string>
headers, byte[] content, string uploadFilePath, AsyncCallback callback,
object state, bool sendChunks)
            httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(uri);

             * The following line fixes an authentication problem explained
            System.Net.ServicePointManager.Expect100Continue = false;

            // The server may use authentication
            if (user != null && pass != null)
                NetworkCredential networkCredential;
                if (domain != null)
                    networkCredential = new NetworkCredential(user, pass,
                    networkCredential = new NetworkCredential(user, pass);
                httpWebRequest.Credentials = networkCredential;
                // Send authentication along with first request.
                httpWebRequest.PreAuthenticate = true;
            httpWebRequest.Method = requestMethod;

            // httpWebRequest.SendChunked = true;
            if (headers != null)
                foreach (string key in headers.Keys)
                    httpWebRequest.Headers.Set(key, headers[key]);

            if (sendChunks)
                httpWebRequest.SendChunked = true;

            // Need to send along content?
            if (content != null || uploadFilePath != null)
                RequestState asyncState = new RequestState();
                asyncState.request = httpWebRequest;
                asyncState.userCallback = callback;
                asyncState.userState = state;

                if (content != null)
                    // The request either contains actual content...
                    httpWebRequest.ContentLength = content.Length;
                    asyncState.content = content;
                    httpWebRequest.ContentType = "text/xml";
                    // ...or a reference to the file to be added as content.
                    httpWebRequest.ContentLength = new
                    asyncState.uploadFilePath = uploadFilePath;

                // Retrieve the request stream.
                Stream putRequestStream1 =

                // Write the string to the destination as text bytes.
                putRequestStream1.Write(content, 0, content.Length);

                // Close the request stream.

                // Retrieve the response.
                HttpWebResponse httpPutResponse1 =

Kindly suggest where am i doing wrong.

Thanks in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.owncloud.org/pipermail/devel/attachments/20150607/ad0da08b/attachment-0001.html>

More information about the Devel mailing list