/// <summary> /// Método acionado quando o número de bytes escritos for atualizado. /// </summary> /// <param name="item"></param> /// <param name="numBytesWritten"></param> private void UpdateNumBytesWritten(Colosoft.Net.IUploaderItem item, long numBytesWritten) { item.NumberBytesSent += numBytesWritten; if (_progressTimer.ElapsedMilliseconds > (_elapsedMilliseconds + 1000)) { OnProgressChanged(); _elapsedMilliseconds = _progressTimer.ElapsedMilliseconds; } }
/// <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); }
/// <summary> /// Processa os dados recebidos pelo upload. /// </summary> /// <param name="item"></param> protected virtual void ProcessUpload(Colosoft.Net.IUploaderItem item) { }
/// <summary> /// Construtor padrão. /// </summary> /// <param name="stream"></param> /// <param name="uploader"></param> /// <param name="item"></param> public TracingUploadStream(System.IO.Stream stream, Uploader uploader, Colosoft.Net.IUploaderItem item) : base(stream) { _uploader = uploader; _item = item; }
/// <summary> /// Recupera a stream para enviar os dados da requisição. /// </summary> /// <param name="item"></param> /// <param name="request"></param> /// <returns></returns> private System.IO.Stream GetRequestStream(Colosoft.Net.IUploaderItem item, System.Net.HttpWebRequest request) { return(new TracingUploadStream(request.GetRequestStream(), this, item)); }