/// <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); } }
/// <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); }