Example #1
0
        public override void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
        {
            if (uploadSession.Status == ResumableUploadSessionStatus.Completed || uploadSession.Status == ResumableUploadSessionStatus.Aborted)
            {
                throw new InvalidOperationException("Upload session was either completed or aborted.");
            }

            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            var requestParams = new Dictionary <string, string>();

            if (uploadSession.Status == ResumableUploadSessionStatus.Started)
            {
                requestParams.Add("upload_id", uploadSession.GetItem <string>("UploadId"));
                requestParams.Add("offset", uploadSession.BytesTransfered.ToString());
            }

            var request = new OAuthService().CreateWebRequest(GetUrlString(DropBoxChunkedUpload, session.ServiceConfiguration),
                                                              "PUT",
                                                              null,
                                                              null,
                                                              ((DropBoxStorageProviderSession)session).Context,
                                                              (DropBoxToken)session.SessionToken,
                                                              requestParams);

            request.ContentLength = chunkLength;
            using (var requestStream = request.GetRequestStream())
            {
                stream.CopyTo(requestStream);
            }

            using (var response = request.GetResponse())
                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream == null)
                    {
                        return;
                    }

                    var json = new JsonHelper();
                    using (var streamReader = new StreamReader(responseStream))
                    {
                        json.ParseJsonMessage(streamReader.ReadToEnd());
                    }

                    var uplSession = (ResumableUploadSession)uploadSession;
                    uplSession["UploadId"]      = json.GetProperty("upload_id");
                    uplSession["Expired"]       = json.GetDateTimeProperty("expired");
                    uplSession.BytesTransfered += chunkLength;
                    uplSession.Status           = ResumableUploadSessionStatus.Started;

                    if (uplSession.BytesToTransfer == uploadSession.BytesTransfered)
                    {
                        CommitUploadSession(session, uploadSession);
                    }
                }
        }
 public override void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     if (uploadSession.Status != ResumableUploadSessionStatus.Completed)
     {
         ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Aborted;
     }
 }
Example #3
0
        public void CommitUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
        {
            if (uploadSession.Status == ResumableUploadSessionStatus.Started)
            {
                var requestService = new OAuthService();
                var request        = requestService.CreateWebRequest(GetCommitUploadSessionUrl(session, uploadSession),
                                                                     "POST",
                                                                     null,
                                                                     null,
                                                                     ((DropBoxStorageProviderSession)session).Context,
                                                                     (DropBoxToken)session.SessionToken,
                                                                     new Dictionary <string, string> {
                    { "upload_id", uploadSession.GetItem <string>("UploadId") }
                });

                int          httpStatusCode;
                WebException httpException;
                requestService.PerformWebRequest(request, null, out httpStatusCode, out httpException);

                if (httpStatusCode != (int)HttpStatusCode.OK)
                {
                    SharpBoxException.ThrowSharpBoxExceptionBasedOnHttpErrorCode((HttpWebRequest)request, (HttpStatusCode)httpStatusCode, httpException);
                }

                var rUploadSession = uploadSession as ResumableUploadSession;
                rUploadSession.FileId = rUploadSession.ParentId != "/" ? rUploadSession.ParentId + "/" + rUploadSession.FileName : rUploadSession.FileName;


                //var file = (BaseFileEntry)uploadSession.File;
                //file.Length = uploadSession.BytesToTransfer;
                //file.Id = file.ParentID != "/" ? file.ParentID + "/" + file.Name : file.Name;

                //var parent = file.Parent as BaseDirectoryEntry;
                //if (parent != null)
                //{
                //    parent.RemoveChildById(file.Name);
                //    parent.AddChild(file);
                //}

                ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Completed;
            }
        }
 public void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
 {
     _service.UploadChunk(session, uploadSession, stream, chunkLength);
 }
 public void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     _service.AbortUploadSession(session, uploadSession);
 }
 public void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
 {
     _service.UploadChunk(session, uploadSession, stream, chunkLength);
 }
 public virtual void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
 {
     throw ResumableUploadNotSupported();
 }
 public void Transfer(IResumableUploadSession transferSession, Stream data, long dataLength)
 {
     _service.UploadChunk(_session, transferSession, data, dataLength);
 }
Example #9
0
        public static string GetCommitUploadSessionUrl(IStorageProviderSession session, IResumableUploadSession uploadSession)
        {
            var rUploadSession = uploadSession as ResumableUploadSession;

            if (rUploadSession == null)
            {
                throw new ArgumentNullException("uploadSession");
            }

            return(GetUrlString(DropBoxCommitChunkedUpload, session.ServiceConfiguration)
                   + "/" + GetRootToken((DropBoxStorageProviderSession)session)
                   + "/" + HttpUtilityEx.UrlEncodeUTF8(DropBoxResourceIDHelpers.GetResourcePath(null, rUploadSession.FileName, rUploadSession.ParentId)));
        }
 public override void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     if (uploadSession.Status != ResumableUploadSessionStatus.Completed)
     {
         ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Aborted;   
     }
 }
 public void Transfer(IResumableUploadSession transferSession, Stream data, long dataLength)
 {
     _service.UploadChunk(_session, transferSession, data, dataLength);
 }
 public void AbortResumableSession(IResumableUploadSession transferSession)
 {
     _service.AbortUploadSession(_session, transferSession);
 }
 public static String GetCommitUploadSessionUrl(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     return GetUrlString(DropBoxCommitChunkedUpload, session.ServiceConfiguration)
            + "/" + GetRootToken((DropBoxStorageProviderSession)session)
            + "/" + HttpUtilityEx.UrlEncodeUTF8(DropBoxResourceIDHelpers.GetResourcePath(uploadSession.File.Parent, uploadSession.File.Name));
 }
        public void CommitUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
        {
            if (uploadSession.Status == ResumableUploadSessionStatus.Started)
            {
                var requestService = new OAuthService();
                var request = requestService.CreateWebRequest(GetCommitUploadSessionUrl(session, uploadSession),
                                                              "POST",
                                                              null,
                                                              null,
                                                              ((DropBoxStorageProviderSession)session).Context,
                                                              (DropBoxToken)session.SessionToken,
                                                              new Dictionary<string, string> {{"upload_id", uploadSession.GetItem<string>("UploadId")}});

                int httpStatusCode;
                WebException httpException;
                requestService.PerformWebRequest(request, null, out httpStatusCode, out httpException);

                if (httpStatusCode != (int)HttpStatusCode.OK)
                    SharpBoxException.ThrowSharpBoxExceptionBasedOnHttpErrorCode((HttpWebRequest)request, (HttpStatusCode)httpStatusCode, httpException);

                var file = (BaseFileEntry)uploadSession.File;
                file.Length = uploadSession.BytesToTransfer;
                file.Id = file.ParentID != "/" ? file.ParentID + "/" + file.Name : file.Name;

                var parent = file.Parent as BaseDirectoryEntry;
                if (parent != null)
                {
                    parent.RemoveChildById(file.Name);
                    parent.AddChild(file);
                }

                ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Completed;
            }
        }
        public override void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
        {
            if (uploadSession.Status == ResumableUploadSessionStatus.Completed || uploadSession.Status == ResumableUploadSessionStatus.Aborted)
                throw new InvalidOperationException("Upload session was either completed or aborted.");

            if (stream == null)
                throw new ArgumentNullException("stream");

            var requestParams = new Dictionary<string, string>();
            if (uploadSession.Status == ResumableUploadSessionStatus.Started)
            {
                requestParams.Add("upload_id", uploadSession.GetItem<string>("UploadId"));
                requestParams.Add("offset", uploadSession.BytesTransfered.ToString());
            }

            var request = new OAuthService().CreateWebRequest(GetUrlString(DropBoxChunkedUpload, session.ServiceConfiguration),
                                                              "PUT",
                                                              null,
                                                              null,
                                                              ((DropBoxStorageProviderSession)session).Context,
                                                              (DropBoxToken)session.SessionToken,
                                                              requestParams);

            request.ContentLength = chunkLength;
            using (var requestStream = request.GetRequestStream())
            {
                stream.CopyTo(requestStream);
            }

            using (var response = request.GetResponse())
            using (var responseStream = response.GetResponseStream())
            {
                if (responseStream == null) return;

                var json = new JsonHelper();
                json.ParseJsonMessage(new StreamReader(responseStream).ReadToEnd());
                
                var uplSession = (ResumableUploadSession)uploadSession;
                uplSession["UploadId"] = json.GetProperty("upload_id");
                uplSession["Expired"] = json.GetDateTimeProperty("expired");
                uplSession.BytesTransfered += chunkLength;
                uplSession.Status = ResumableUploadSessionStatus.Started;
                
                if (uplSession.BytesToTransfer == uploadSession.BytesTransfered)
                {
                    CommitUploadSession(session, uploadSession);
                }
            }
        }
        public override void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
        {
            if (stream == null) 
                throw new ArgumentNullException("stream");

            if (uploadSession.Status != ResumableUploadSessionStatus.Started)
                throw new InvalidOperationException("Can't upload chunk for given upload session.");

            var request = WebRequest.Create(uploadSession.GetItem<string>("Location"));
            request.Method = "PUT";
            request.ContentLength = chunkLength;
            request.Headers.Add("Content-Range", string.Format("bytes {0}-{1}/{2}",
                                                               uploadSession.BytesTransfered,
                                                               uploadSession.BytesTransfered + chunkLength - 1,
                                                               uploadSession.BytesToTransfer));

            using (var requestStream = request.GetRequestStream())
            {
                stream.CopyTo(requestStream);
            }


            HttpWebResponse response;
            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException exception)
            {
                if (exception.Status == WebExceptionStatus.ProtocolError && exception.Response != null && exception.Response.Headers.AllKeys.Contains("Range"))
                {
                    response = (HttpWebResponse)exception.Response;
                }
                else
                {
                    throw;
                }
            }

            if (response.StatusCode != HttpStatusCode.Created)
            {
                var uplSession = (ResumableUploadSession)uploadSession;
                uplSession.BytesTransfered += chunkLength;

                var locationHeader = response.Headers["Location"];
                if (!string.IsNullOrEmpty(locationHeader))
                {
                    uplSession["Location"] = locationHeader;
                }
            }
            else
            {
                ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Completed;

                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream == null) return;

                    var respFile = GoogleDocsXmlParser.ParseEntriesXml(session, new StreamReader(responseStream).ReadToEnd()).First();
                    var initFile = (BaseFileEntry)uploadSession.File;

                    //replace old file with the file from response
                    initFile.Name = respFile.Name;
                    initFile.Id = respFile.Id;
                    initFile.Length = respFile.Length;
                    initFile.Modified = respFile.Modified;
                    initFile[GoogleDocsConstants.EtagProperty] = respFile[GoogleDocsConstants.EtagProperty];
                    initFile[GoogleDocsConstants.KindProperty] = respFile[GoogleDocsConstants.KindProperty];
                    initFile[GoogleDocsConstants.DownloadUrlProperty] = respFile[GoogleDocsConstants.DownloadUrlProperty];
                    initFile[GoogleDocsConstants.ResEditMediaProperty] = respFile[GoogleDocsConstants.ResEditMediaProperty];

                    var parent = initFile.Parent as BaseDirectoryEntry;
                    if (parent != null)
                    {
                        parent.RemoveChildById(initFile.Name);
                        parent.AddChild(initFile);
                    }
                }
            }

            response.Close();
        }
Example #17
0
 public virtual void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     throw ResumableUploadNotSupported();
 }
 public void AbortResumableSession(IResumableUploadSession transferSession)
 {
     _service.AbortUploadSession(_session, transferSession);
 }
Example #19
0
 public virtual void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
 {
     throw ResumableUploadNotSupported();
 }
        public override void UploadChunk(IStorageProviderSession session, IResumableUploadSession uploadSession, Stream stream, long chunkLength)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }

            if (uploadSession.Status != ResumableUploadSessionStatus.Started)
            {
                throw new InvalidOperationException("Can't upload chunk for given upload session.");
            }

            var request = WebRequest.Create(uploadSession.GetItem <string>("Location"));

            request.Method        = "PUT";
            request.ContentLength = chunkLength;
            request.Headers.Add("Content-Range", string.Format("bytes {0}-{1}/{2}",
                                                               uploadSession.BytesTransfered,
                                                               uploadSession.BytesTransfered + chunkLength - 1,
                                                               uploadSession.BytesToTransfer));

            using (var requestStream = request.GetRequestStream())
            {
                stream.CopyTo(requestStream);
            }

            HttpWebResponse response;

            try
            {
                response = (HttpWebResponse)request.GetResponse();
            }
            catch (WebException exception)
            {
                if (exception.Status == WebExceptionStatus.ProtocolError && exception.Response != null && exception.Response.Headers.AllKeys.Contains("Range"))
                {
                    response = (HttpWebResponse)exception.Response;
                }
                else
                {
                    throw;
                }
            }

            if (response.StatusCode != HttpStatusCode.Created)
            {
                var uplSession = (ResumableUploadSession)uploadSession;
                uplSession.BytesTransfered += chunkLength;

                var locationHeader = response.Headers["Location"];
                if (!string.IsNullOrEmpty(locationHeader))
                {
                    uplSession["Location"] = locationHeader;
                }
            }
            else
            {
                ((ResumableUploadSession)uploadSession).Status = ResumableUploadSessionStatus.Completed;

                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream == null)
                    {
                        return;
                    }
                    string xml;
                    using (var streamReader = new StreamReader(responseStream))
                    {
                        xml = streamReader.ReadToEnd();
                    }
                    var respFile = GoogleDocsXmlParser.ParseEntriesXml(session, xml).First();
                    var initFile = (BaseFileEntry)uploadSession.File;

                    //replace old file with the file from response
                    initFile.Name     = respFile.Name;
                    initFile.Id       = respFile.Id;
                    initFile.Length   = respFile.Length;
                    initFile.Modified = respFile.Modified;
                    initFile[GoogleDocsConstants.EtagProperty]         = respFile[GoogleDocsConstants.EtagProperty];
                    initFile[GoogleDocsConstants.KindProperty]         = respFile[GoogleDocsConstants.KindProperty];
                    initFile[GoogleDocsConstants.DownloadUrlProperty]  = respFile[GoogleDocsConstants.DownloadUrlProperty];
                    initFile[GoogleDocsConstants.ResEditMediaProperty] = respFile[GoogleDocsConstants.ResEditMediaProperty];

                    var parent = initFile.Parent as BaseDirectoryEntry;
                    if (parent != null)
                    {
                        parent.RemoveChildById(initFile.Name);
                        parent.AddChild(initFile);
                    }
                }
            }

            response.Close();
        }
 public void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     _service.AbortUploadSession(session, uploadSession);
 }
 public static String GetCommitUploadSessionUrl(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     return(GetUrlString(DropBoxCommitChunkedUpload, session.ServiceConfiguration)
            + "/" + GetRootToken((DropBoxStorageProviderSession)session)
            + "/" + HttpUtilityEx.UrlEncodeUTF8(DropBoxResourceIDHelpers.GetResourcePath(uploadSession.File.Parent, uploadSession.File.Name)));
 }
 public virtual void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession)
 {
     throw ResumableUploadNotSupported();
 }