Beispiel #1
0
        public int Upload(long parentId, string filename, UploadIfExists ifExists,
                          bool useRevisioning, long revision, string device,
                          byte[] buffer, int bufferSize, long totalFileSize,
                          out string statusDescription,
                          out string newFilename,
                          out long newFileObjectId,
                          out long newFileRevision)
        {
            // init out parms
            newFilename       = null;
            newFileObjectId   = -1;
            newFileRevision   = -1;
            statusDescription = String.Empty;

            if (parentId < 0)
            {
                return(-1);
            }

            string url = URLPrefix + "upload?parentid=" + Uri.EscapeDataString(parentId.ToString())
                         + @"&name=" + Uri.EscapeDataString(filename)
                         + @"&ifexists=" + FF.Common.EnumUtils.StringValueOf(ifExists).ToLower()
                         + @"&userevisioning=" + useRevisioning.ToString().ToLower()
                         + @"&rev=" + revision.ToString().ToLower()
                         + @"&totalfilesize=" + totalFileSize.ToString()     // not using range headers due to silverlight
                         + @"&device=" + Uri.EscapeDataString(device);

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

            if (!String.IsNullOrEmpty(authCookie))
            {
                request.Headers["Cookie"] = authCookie;
            }

            // set type
            request.Method      = "POST";
            request.ContentType = "application/x-www-form-urlencoded";

            // switched to query string parm because of silverlight
            //string rangeValue = String.Format("bytes {0}-{1}/{2}",
            //  0,
            //  (bufferSize > 0) ? bufferSize - 1 : 0,
            //  totalFileSize);
            //request.Headers.Add("Content-Range", rangeValue);
            request.ContentLength = bufferSize;

            Stream newStream = request.GetRequestStream();

            newStream.Write(buffer, 0, bufferSize);

            AsyncCallback asyncCallback = new AsyncCallback(ProcessHttpResponse);
            IAsyncResult  asyncResult   = request.BeginGetResponse(asyncCallback, request);

            autoEvent.WaitOne();

            int status = -1; // way bad on the client api side

            if (!String.IsNullOrEmpty(XmlResponse))
            {
                // get status
                var    returnStatus   = XDocument.Parse(XmlResponse).Element("response").Element("status").Value;
                string returnFilename = String.Empty;
                string returnId       = String.Empty;
                string returnRevision = String.Empty;

                // need to be careful on other tags; for example, a 500 return code might not produce other tags
                try
                {
                    returnFilename = XDocument.Parse(XmlResponse).Element("response").Element("filename").Value;
                }
                catch { }
                try
                {
                    returnId = XDocument.Parse(XmlResponse).Element("response").Element("id").Value;
                }
                catch { }
                try
                {
                    returnRevision = XDocument.Parse(XmlResponse).Element("response").Element("rev").Value;
                }
                catch { }
                try
                {
                    statusDescription = XDocument.Parse(XmlResponse).Element("response").Element("statusdescription").Value;
                }
                catch { }

                int  returnIntVal;
                bool didParse = Int32.TryParse(returnStatus, out returnIntVal);
                if (didParse)
                {
                    status = returnIntVal;
                }

                // get id
                long returnFileObjectIdVal = -1;
                didParse = Int64.TryParse(returnId, out returnFileObjectIdVal);
                if (didParse)
                {
                    newFileObjectId = returnFileObjectIdVal;
                }

                // get rev
                long returnRevVal = -1;
                didParse = Int64.TryParse(returnRevision, out returnRevVal);
                if (didParse)
                {
                    newFileRevision = returnRevVal;
                }

                // get filename
                newFilename = returnFilename;
            }

            return(status);
        }
Beispiel #2
0
        public int Upload(long parentId, string filename, UploadIfExists ifExists,
                      bool useRevisioning, long revision, string device,
                      byte[] buffer, int bufferSize, long totalFileSize,
                      out string statusDescription,
                      out string newFilename,
                      out long newFileObjectId,
                      out long newFileRevision)
        {
            // init out parms
              newFilename = null;
              newFileObjectId = -1;
              newFileRevision = -1;
              statusDescription = String.Empty;

              if (parentId < 0)
            return -1;

              string url = URLPrefix + "upload?parentid=" + Uri.EscapeDataString(parentId.ToString())
                             + @"&name=" + Uri.EscapeDataString(filename)
                             + @"&ifexists=" + FF.Common.EnumUtils.StringValueOf(ifExists).ToLower()
                             + @"&userevisioning=" + useRevisioning.ToString().ToLower()
                             + @"&rev=" + revision.ToString().ToLower()
                             + @"&totalfilesize=" + totalFileSize.ToString() // not using range headers due to silverlight
                             + @"&device=" + Uri.EscapeDataString(device);

              HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;

              if (!String.IsNullOrEmpty(authCookie))
            request.Headers["Cookie"] = authCookie;

              // set type
              request.Method = "POST";
              request.ContentType = "application/x-www-form-urlencoded";

              // switched to query string parm because of silverlight
              //string rangeValue = String.Format("bytes {0}-{1}/{2}",
              //  0,
              //  (bufferSize > 0) ? bufferSize - 1 : 0,
              //  totalFileSize);
              //request.Headers.Add("Content-Range", rangeValue);
              request.ContentLength = bufferSize;

              Stream newStream = request.GetRequestStream();
              newStream.Write(buffer, 0, bufferSize);

              AsyncCallback asyncCallback = new AsyncCallback(ProcessHttpResponse);
              IAsyncResult asyncResult = request.BeginGetResponse(asyncCallback, request);

              autoEvent.WaitOne();

              int status = -1; // way bad on the client api side
              if (!String.IsNullOrEmpty(XmlResponse))
              {
            // get status
            var returnStatus = XDocument.Parse(XmlResponse).Element("response").Element("status").Value;
            string returnFilename = String.Empty;
            string returnId = String.Empty;
            string returnRevision = String.Empty;

            // need to be careful on other tags; for example, a 500 return code might not produce other tags
            try
            {
              returnFilename = XDocument.Parse(XmlResponse).Element("response").Element("filename").Value;
            }
            catch { }
            try
            {
              returnId = XDocument.Parse(XmlResponse).Element("response").Element("id").Value;
            }
            catch { }
            try
            {
              returnRevision = XDocument.Parse(XmlResponse).Element("response").Element("rev").Value;
            }
            catch { }
            try
            {
              statusDescription = XDocument.Parse(XmlResponse).Element("response").Element("statusdescription").Value;
            }
            catch { }

            int returnIntVal;
            bool didParse = Int32.TryParse(returnStatus, out returnIntVal);
            if (didParse)
              status = returnIntVal;

            // get id
            long returnFileObjectIdVal = -1;
            didParse = Int64.TryParse(returnId, out returnFileObjectIdVal);
            if (didParse)
              newFileObjectId = returnFileObjectIdVal;

            // get rev
            long returnRevVal = -1;
            didParse = Int64.TryParse(returnRevision, out returnRevVal);
            if (didParse)
              newFileRevision = returnRevVal;

            // get filename
            newFilename = returnFilename;
              }

              return status;
        }