From b65727734e8dfdfd1be79dee79c25520858d712e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Mon, 31 Dec 2018 10:06:06 +0100 Subject: Add content-type header to file_server (denoland/deno_std#47) Original: https://github.com/denoland/deno_std/commit/ab27371a012e505ca5d6c7185b4944b2f146b145 --- net/file_server.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'net/file_server.ts') 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 = ` @@ -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, -- cgit v1.2.3