Beispiel #1
0
 /// <summary>
 /// Processa a requisição realizada.
 /// </summary>
 /// <param name="context"></param>
 public void ProcessRequest(System.Web.HttpContext context)
 {
     context.Request.RemoveValidateRequest();
     try
     {
         var result = Colosoft.Net.SecurityToken.SecurityTokenHttpRequest.Validate(context.Request.Headers);
         if (!result.Success)
         {
             HandleException(result.Exception ?? new Exception(result.Message.Format()), 401, false);
         }
         else
         {
             var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Colosoft.Net.UploaderItemInfo));
             Colosoft.Net.UploaderItemInfo info = null;
             using (var stream = new System.IO.StringReader(context.Request.Form["info"]))
                 info = (Colosoft.Net.UploaderItemInfo)serializer.Deserialize(stream);
             var dataFile = context.Request.Files["data"];
             if (dataFile != null)
             {
                 var item = new Colosoft.Net.UploaderStreamItem(dataFile.InputStream);
                 if (info != null)
                 {
                     foreach (var attr in info.Attributes)
                     {
                         item.Attributes.Add(attr.Name, attr.Value);
                     }
                 }
                 ProcessUpload(item);
             }
         }
     }
     catch (Exception ex)
     {
         HandleException(ex, 200, false);
     }
 }
Beispiel #2
0
        /// <summary>
        /// Cria a stream com os parametros para a requisição.
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private System.Net.HttpWebRequest CreateStreamRequest(Colosoft.Net.IUploaderItem item)
        {
            byte[] buffer   = new byte[1024];
            int    read     = 0;
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");

            byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
            System.Net.HttpWebRequest request = CreateRequest(Url);
            request.ContentType = "multipart/form-data; boundary=" + boundary;
            request.Method      = "POST";
            request.KeepAlive   = true;
            request.Credentials = System.Net.CredentialCache.DefaultCredentials;
            var info = new Colosoft.Net.UploaderItemInfo(item);

            using (var outputStream = GetRequestStream(item, request))
            {
                outputStream.Write(boundarybytes, 0, boundarybytes.Length);
                string header      = "Content-Disposition: form-data; name=\"info\";\r\nContent-Type:application/octet-stream\r\n\r\n";
                byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                outputStream.Write(headerbytes, 0, headerbytes.Length);
                var serializer = new System.Xml.Serialization.XmlSerializer(typeof(Colosoft.Net.UploaderItemInfo));
                serializer.Serialize(outputStream, info);
                outputStream.Write(boundarybytes, 0, boundarybytes.Length);
                header      = "Content-Disposition: form-data; name=\"data\"; filename=\"item.data\"\r\nContent-Type:application/octet-stream\r\n\r\n";
                headerbytes = System.Text.Encoding.UTF8.GetBytes(header);
                outputStream.Write(headerbytes, 0, headerbytes.Length);
                using (var itemStream = item.GetContent())
                    while ((read = itemStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        outputStream.Write(buffer, 0, read);
                    }
                byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
                outputStream.Write(trailer, 0, trailer.Length);
            }
            return(request);
        }