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

Vincent Petry pvince81 at owncloud.com
Mon Jun 8 08:16:00 GMT 2015


Hello,

Check out
https://github.com/owncloud/pyocclient/blob/master/owncloud/owncloud.py#L457
for how to do it properly.

You need to pass a magic file name (file name + a bunch of stuff
embedded in the file name) to make it work.

Cheers,

Vincent

On 07.06.2015 11:22, RAHUL JAIN wrote:
> 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.
>
>
>
> _______________________________________________
> Devel mailing list
> Devel at owncloud.org
> http://mailman.owncloud.org/mailman/listinfo/devel

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.owncloud.org/pipermail/devel/attachments/20150608/2792e4a9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <http://mailman.owncloud.org/pipermail/devel/attachments/20150608/2792e4a9/attachment.sig>


More information about the Devel mailing list