Example #1
0
        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
        }
Example #3
0
        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);
            }
        }
Example #6
0
        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);
        }
Example #10
0
        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);
        }