summaryrefslogtreecommitdiff
path: root/net/file_server.ts
diff options
context:
space:
mode:
Diffstat (limited to 'net/file_server.ts')
-rwxr-xr-xnet/file_server.ts21
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,