private void Process(HttpListenerContext context) { string requestedFile = context.Request.Url.AbsolutePath.Substring(1); if (string.IsNullOrEmpty(requestedFile)) { //Index files time foreach (string fname in defaultFiles) { if (File.Exists(Path.Combine(_directory, fname))) { requestedFile = fname; break; } } } requestedFile = Path.Combine(_directory, requestedFile); if (File.Exists(requestedFile)) { try { using (Stream filedata = new FileStream(requestedFile, FileMode.Open)) { string mimetype; MIME_TYPES.TryGetValue(Path.GetExtension(requestedFile), out mimetype); if (string.IsNullOrEmpty(mimetype)) { mimetype = HTML_RESPONSE_CONTENT_TYPE; //Default } context.Response.StatusCode = (int)HttpStatusCode.OK; context.Response.ContentLength64 = filedata.Length; context.Response.ContentType = mimetype; byte[] buffer = new byte[1024 * 8]; int byteCount; while ((byteCount = filedata.Read(buffer, 0, buffer.Length)) > 0) { context.Response.OutputStream.Write(buffer, 0, byteCount); } context.Response.OutputStream.Flush(); } } catch (Exception ex) { context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; UtilClass.WriteLine(ex); } } else { context.Response.StatusCode = (int)HttpStatusCode.NotFound; } context.Response.OutputStream.Close(); }
static string DetermineMimeTypeFromExtension(string filename) { var ext = System.IO.Path.GetExtension(filename).ToLower(); var match = MIME_TYPES.Where(o => o.Value.Contains(ext)).Select(o => o.Key).FirstOrDefault(); if (match != null) { return(match); } return("application/octet-stream"); //default; }