diff options
Diffstat (limited to 'net/file_server.ts')
| -rwxr-xr-x | net/file_server.ts | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/file_server.ts b/net/file_server.ts index 3d14934db..aaaec64d5 100755 --- a/net/file_server.ts +++ b/net/file_server.ts @@ -12,6 +12,8 @@ import { Response } from "./http.ts"; import { cwd, DenoError, ErrorKind, args, stat, readDir, open } from "deno"; +import { extname } from "../path/index.ts"; +import * as extensionsMap from "./extension_map.json"; const dirViewerTemplate = ` <!DOCTYPE html> @@ -160,11 +162,30 @@ async function serveDir(req: ServerRequest, dirPath: string, dirName: string) { return res; } +function guessContentType(filename: string): string { + let extension = extname(filename); + let contentType = extensionsMap[extension]; + + if (contentType) { + return contentType; + } + + extension = extension.toLowerCase(); + contentType = extensionsMap[extension]; + + if (contentType) { + return contentType; + } + + return extensionsMap['']; +} + async function serveFile(req: ServerRequest, filename: string) { const file = await open(filename); const fileInfo = await stat(filename); const headers = new Headers(); headers.set("content-length", fileInfo.len.toString()); + headers.set("content-type", guessContentType(filename)); const res = { status: 200, |
