diff options
| author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2018-12-31 10:06:06 +0100 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2018-12-31 09:06:05 +0000 |
| commit | b65727734e8dfdfd1be79dee79c25520858d712e (patch) | |
| tree | f6895142a415680af120cd97a30590f07f05fa81 /net/file_server.ts | |
| parent | 95e378a28b0e0ba1d05f2a41bc27a7368aac66f4 (diff) | |
Add content-type header to file_server (denoland/deno_std#47)
Original: https://github.com/denoland/deno_std/commit/ab27371a012e505ca5d6c7185b4944b2f146b145
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, |
