Deno 中文件上传和下载的实现方法

在 Deno 中实现文件上传和下载是 Web 应用程序开发中常见的任务。本文将介绍如何以简单易懂的方式实现文件上传和下载,并提供示例代码以帮助您更好地理解。

文件上传实现方法

实现文件上传可以使用 Deno 的 HTTP 模块提供的 ServerRequestFormData 类。以下是该方法的简单步骤:

  1. 创建一个 HTTP 服务器实例,监听指定的端口。
  2. onRequest 事件处理函数中,使用 await 关键字获取请求体(即上传的文件)。
  3. 将请求体传递给 FormData 类,使用 append 方法添加到表单数据中。
  4. 将表单数据保存为文件。

示例代码如下:

import { serve } from "https://deno.land/std/http/server.ts";
import { FormData } from "https://deno.land/std/mime/multipart.ts";

const server = serve({ port: 8000 });

for await (const req of server) {
  if (req.method === "POST") {
    const formData = new FormData();
    const body = await req.body();
    for (const [key, value] of Object.entries(await body.value)) {
      formData.append(key, value);
    }
    for (const [key, value] of formData.entries()) {
      const [content] = value;
      await Deno.writeFile(`./${content.filename}`, content);
    }
    req.respond({ status: 200, body: "上传成功!" });
  } else {
    req.respond({ status: 405, body: "仅支持 POST 请求!" });
  }
}

这个示例代码在 8000 端口启动了一个 HTTP 服务器,监听客户端的请求。只有 POST 请求才能上传文件,其他请求将返回 405 状态码。上传的文件将保存在服务器的根目录中。

文件下载实现方法

实现文件下载同样可以使用 Deno 的 HTTP 模块。以下是该方法的简单步骤:

  1. 创建一个 HTTP 服务器实例,监听指定的端口。
  2. onRequest 事件处理函数中,使用 Deno 的 readFile 方法读取客户端请求的文件。
  3. 将文件内容写入响应流中,并设置适当的响应头。

示例代码如下:

import { serve } from "https://deno.land/std/http/server.ts";

const server = serve({ port: 8000 });

for await (const req of server) {
  if (req.method === "GET" && req.url.startsWith("/download")) {
    const filePath = "./file.txt"; // 文件路径
    const content = await Deno.readFileSync(filePath);
    req.respond({
      status: 200,
      headers: new Headers({
        "Content-Disposition": `attachment; filename=file.txt`,
      }),
      body: content,
    });
  } else {
    req.respond({ status: 404, body: "未找到该文件!" });
  }
}

这个示例代码在 8000 端口启动了一个 HTTP 服务器,监听客户端的请求。只有 GET 请求且 URL 以 /download 开头的请求才会触发文件下载,其他请求将返回 404 状态码。文件路径和文件名可以自行进行修改。

总结

Deno 提供了丰富而灵活的 API,可以轻松实现文件上传和下载功能。通过本文的介绍和示例代码,您可以更好地理解如何在 Deno 中实现文件上传和下载的功能,并将其应用到自己的 Web 应用程序开发中。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65aa056badd4f0e0ff386c94


纠错反馈