[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,
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
here:
             *
http://www.devnewsgroups.net/dotnetframework/t9525-http-protocol-violation-long.aspx
             */
            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,
domain);
                }
                else
                {
                    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";
                }
                else
                {
                    // ...or a reference to the file to be added as content.
                    httpWebRequest.ContentLength = new
FileInfo(uploadFilePath).Length;
                    asyncState.uploadFilePath = uploadFilePath;
                }

                // Retrieve the request stream.
                Stream putRequestStream1 =
httpWebRequest.GetRequestStream();

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

                // Close the request stream.
                putRequestStream1.Close();

                // Retrieve the response.
                HttpWebResponse httpPutResponse1 =
(HttpWebResponse)httpWebRequest.GetResponse();
            }
            else
            {
            }
        }


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