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; } }
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 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); }
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 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(); }
public virtual void AbortUploadSession(IStorageProviderSession session, IResumableUploadSession uploadSession) { 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 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))); }