public void CommitUploadStream(params object[] arg) { // convert the args // FtpService svc = arg[0] as FtpService; FtpWebRequest uploadRequest = arg[1] as FtpWebRequest; BaseFileEntry fileSystemEntry = arg[2] as BaseFileEntry; #if !WINDOWS_PHONE && !ANDROID WebRequestStream requestStream = arg[3] as WebRequestStream; // close the stream requestStream.Close(); // close conncetion uploadRequest.Abort(); // check if all data was written into stream if (requestStream.WrittenBytes != uploadRequest.ContentLength) { // nothing todo request was aborted return; } #endif // adjust the lengt #if !WINDOWS_PHONE && !ANDROID fileSystemEntry.Length = uploadRequest.ContentLength; #endif }
public void CommitUploadStream(params object[] arg) { // convert the args DavService svc = arg[0] as DavService; HttpWebRequest uploadRequest = arg[1] as HttpWebRequest; BaseFileEntry fileSystemEntry = arg[2] as BaseFileEntry; #if !WINDOWS_PHONE && !MONODROID WebRequestStream requestStream = arg[3] as WebRequestStream; // check if all data was written into stream if (requestStream.WrittenBytes != uploadRequest.ContentLength) { // nothing todo request was aborted return; } #endif // perform the request int code; WebException e; svc.PerformWebRequest(uploadRequest, null, out code, out e); // check the ret value if (!HttpUtilityEx.IsSuccessCode(code)) { SharpBoxException.ThrowSharpBoxExceptionBasedOnHttpErrorCode(uploadRequest, (HttpStatusCode)code, e); } // adjust the lengt #if !WINDOWS_PHONE && !MONODROID fileSystemEntry.Length = uploadRequest.ContentLength; #endif }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry fileSystemEntry, long uploadSize) { // build the url string url = GetResourceUrl(session, fileSystemEntry, null); // get the session creds ICredentials creds = session.SessionToken as ICredentials; // build the webrequest FtpWebRequest networkRequest = (FtpWebRequest)_ftpService.CreateWebRequest(url, WebRequestMethodsEx.Ftp.UploadFile, creds, false, null); // set the binary mode networkRequest.UseBinary = true; // Notify FTP of the expected size networkRequest.ContentLength = uploadSize; // get the request stream WebRequestStream requestStream = _ftpService.GetRequestStream(networkRequest, uploadSize); // add disposal opp requestStream.PushPostDisposeOperation(CommitUploadStream, _ftpService, networkRequest, fileSystemEntry, requestStream); // go ahead return(requestStream); }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry fileSystemEntry, long uploadSize) { // build the url string url = GetResourceUrl(session, fileSystemEntry, null); // get the session creds ICredentials creds = session.SessionToken as ICredentials; // Build the service DavService svc = new DavService(); // get the service config WebDavConfiguration conf = (WebDavConfiguration)session.ServiceConfiguration; // build the webrequest WebRequest networkRequest = svc.CreateWebRequestPUT(url, creds.GetCredential(null, null), conf.UploadDataStreambuffered); // get the request stream WebRequestStream requestStream = svc.GetRequestStream(networkRequest, uploadSize); // add disposal opp requestStream.PushPostDisposeOperation(CommitUploadStream, svc, networkRequest, fileSystemEntry, requestStream); // go ahead return(requestStream); }
public bool TryOpenStream(Uri uri, out Stream stream) { stream = default; if (!CanAccept(uri)) { return(false); } var request = WebRequest.CreateHttp(uri); request.Method = WebRequestMethods.Http.Get; try { var response = (HttpWebResponse)request.GetResponse(); if (!IsSuccessCode(response.StatusCode)) { response.Dispose(); return(false); } stream = new WebRequestStream(response); return(true); } catch (WebException) { return(false); } }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry fileSystemEntry, long uploadSize) { // build the url string url = GetDownloadFileUrlInternal(session, fileSystemEntry.Parent); // get the session DropBoxStorageProviderSession dbSession = session as DropBoxStorageProviderSession; // build service OAuthService svc = new OAuthService(); // encode the filename String fileName = fileSystemEntry.Name; // build oAuth parameter var param = new Dictionary <string, string>(); param.Add("file", fileName); // sign the url String signedUrl = svc.GetSignedUrl(url, dbSession.Context, dbSession.SessionToken as DropBoxToken, param); // build upload web request WebRequest uploadRequest = svc.CreateWebRequestMultiPartUpload(signedUrl, null); // get the network stream WebRequestStream ws = svc.GetRequestStreamMultiPartUpload(uploadRequest, fileName, uploadSize); // register the post dispose opp ws.PushPostDisposeOperation(CommitUploadStream, svc, uploadRequest, uploadSize, fileSystemEntry, ws); // go ahead return(ws); }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry entry, long uploadSize) { if (entry is ICloudDirectoryEntry) { throw new ArgumentException("Upload operation can be perform for files only"); } String uri = String.Format("{0}/{1}/files/{2}", SkyDriveConstants.BaseAccessUrl, entry.ParentID, entry.Name); uri = SignUri(session, uri); WebRequest request = WebRequest.Create(uri); request.Method = "PUT"; request.ContentLength = uploadSize; if (entry is BaseFileEntry) { (entry as BaseFileEntry).Length = uploadSize; } var stream = new WebRequestStream(request.GetRequestStream(), request, null); stream.PushPostDisposeOperation(CommitUploadOperation, request, entry); return(stream); }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry fileSystemEntry, long uploadSize) { var tempStream = new FileStream(Path.GetTempFileName(), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.DeleteOnClose); var stream = new WebRequestStream(tempStream, null, null); stream.PushPreDisposeOperation(CommitUploadOperation, session, fileSystemEntry, tempStream, uploadSize); return(stream); }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry fileSystemEntry, long uploadSize) { String url; bool update = false; String type = GetMimeType(fileSystemEntry.Name); if (GoogleDocsResourceHelper.IsResorceId(fileSystemEntry.Id)) //update existent { var ext = GoogleDocsResourceHelper.GetExtensionByKind(fileSystemEntry.GetPropertyValue(GoogleDocsConstants.KindProperty)); if (!String.IsNullOrEmpty(ext)) { //for google docs kind we previously add an extension that don't needed anymore var index = fileSystemEntry.Name.IndexOf('.' + ext, StringComparison.Ordinal); (fileSystemEntry as BaseFileEntry).Name = fileSystemEntry.Name.Substring(0, index); } url = fileSystemEntry.GetPropertyValue(GoogleDocsConstants.ResEditMediaProperty); update = true; if (String.IsNullOrEmpty(url)) { throw new HttpException(403, "User not authorize to update resource"); } } else { url = fileSystemEntry.Parent.GetPropertyValue(GoogleDocsConstants.ResCreateMediaProperty) + "?convert=false"; } //first initiate resumable upload request var initRequest = CreateWebRequest(session, url, update ? "PUT" : "POST", null); initRequest.Headers.Add("X-Upload-Content-Length", uploadSize.ToString(CultureInfo.InvariantCulture)); initRequest.Headers.Add("X-Upload-Content-Type", type); if (update) { initRequest.Headers.Add("If-Match", "*"); } GoogleDocsXmlParser.WriteAtom(initRequest, GoogleDocsXmlParser.EntryElement(null, GoogleDocsXmlParser.TitleElement(fileSystemEntry.Name))); var response = initRequest.GetResponse(); //secondly create request to obtained url var uplRequest = CreateWebRequest(session, response.Headers["Location"], "PUT", null); uplRequest.ContentLength = uploadSize; uplRequest.ContentType = type; uplRequest.Headers.Add("Content-Range", String.Format("bytes {0}-{1}/{2}", 0, uploadSize - 1, uploadSize)); var wrStream = new WebRequestStream(uplRequest.GetRequestStream(), uplRequest, null); wrStream.PushPostDisposeOperation(CommitUploadOperation, session, uplRequest, fileSystemEntry); return(wrStream); }
public override Stream CreateUploadStream(IStorageProviderSession session, ICloudFileSystemEntry entry, long uploadSize) { if (entry is ICloudDirectoryEntry) { throw new ArgumentException("Upload operation can be perform for files only"); } var tempStream = new FileStream(Path.GetTempFileName(), FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.DeleteOnClose); var uploadStream = new WebRequestStream(tempStream, null, null); uploadStream.PushPreDisposeOperation(CommitUploadOperation, tempStream, uploadSize, session, entry); return(uploadStream); }