deno.com
本页内容

编写文件服务器

文件服务器监听传入的 HTTP 请求,并从本地文件系统提供文件。本教程演示了如何使用 Deno 的内置 文件系统 API 创建一个简单的文件服务器。

编写一个简单的文件服务器 跳转到标题

首先,创建一个名为 file-server.ts 的新文件。

我们将使用 Deno 内置的 HTTP 服务器 来监听传入的请求。在您的新 file-server.ts 文件中,添加以下代码

file-server.ts
Deno.serve(
  { hostname: "localhost", port: 8080 },
  (request) => {
    const url = new URL(request.url);
    const filepath = decodeURIComponent(url.pathname);
  },
);

如果您不熟悉 URL 对象,可以在 URL API 文档中了解更多信息。 decodeURIComponent 函数 用于解码 URL 编码的路径,以防字符已被百分比编码。)

打开文件并流式传输其内容 跳转到标题

当收到请求时,我们将尝试使用 Deno.open 打开请求 URL 中指定的文件。

如果请求的文件存在,我们将使用 ReadableStream API 将其转换为可读的数据流,并将其内容流式传输到响应。我们不知道请求的文件可能有多大,因此流式传输它可以防止在服务大型文件或并发处理多个请求时出现内存问题。

如果文件不存在,我们将返回“404 Not Found”响应。

在请求处理程序的主体中,在两个变量下方,添加以下代码

try {
  const file = await Deno.open("." + filepath, { read: true });
  return new Response(file.readable);
} catch {
  return new Response("404 Not Found", { status: 404 });
}

运行文件服务器 跳转到标题

使用 deno run 命令运行您的新文件服务器,允许读取访问和网络访问

deno run --allow-read=. --allow-net file-server.ts

使用 Deno 标准库提供的文件服务器 跳转到标题

从头开始编写文件服务器是了解 Deno 的 HTTP 服务器如何工作的好方法。但是,从头开始编写生产就绪的文件服务器可能很复杂且容易出错。最好使用经过测试且可靠的解决方案。

Deno 标准库为您提供了一个 文件服务器,因此您不必自己编写。

要使用它,首先将远程脚本安装到本地文件系统

# Deno 1.x
deno install --allow-net --allow-read jsr:@std/http/file-server
# Deno 2.x
deno install --global --allow-net --allow-read jsr:@std/http/file-server

这会将脚本安装到 Deno 安装根目录,例如 /home/user/.deno/bin/file-server

您现在可以使用简化的脚本名称运行脚本

$ file-server .
Listening on:
- Local: http://0.0.0.0:8000

要查看文件服务器可用的完整选项列表,请运行 file-server --help

如果您在 Web 浏览器中访问 http://0.0.0.0:8000/,您将看到本地目录的内容。

在 Deno 项目中使用 @std/http 文件服务器 跳转到标题

要在 Deno 项目 中使用文件服务器,您可以将其添加到您的 deno.json 文件中,如下所示

deno add jsr:@std/http

然后将其导入到您的项目中

file-server.ts
import { serveDir } from "@std/http/file-server";

Deno.serve((req) => {
  const pathname = new URL(req.url).pathname;
  if (pathname.startsWith("/static")) {
    return serveDir(req, {
      fsRoot: "path/to/static/files/dir",
    });
  }
  return new Response();
});

此代码将使用 Deno.serve 设置 HTTP 服务器。当请求传入时,它会检查请求的路径是否以“/static”开头。如果是,则从指定目录提供文件。否则,它将以空响应进行响应。

🦕 现在您知道如何编写自己的简单文件服务器,以及如何使用 Deno 标准库提供的文件服务器实用程序。您已经准备好处理各种任务 - 无论是服务静态文件、处理上传、转换数据还是管理访问控制 - 您都已准备好使用 Deno 服务文件。

您找到所需的内容了吗?

隐私政策