在 Deno 中实现文件上传和下载是 Web 应用程序开发中常见的任务。本文将介绍如何以简单易懂的方式实现文件上传和下载,并提供示例代码以帮助您更好地理解。
文件上传实现方法
实现文件上传可以使用 Deno 的 HTTP 模块提供的 ServerRequest
和 FormData
类。以下是该方法的简单步骤:
- 创建一个 HTTP 服务器实例,监听指定的端口。
- 在
onRequest
事件处理函数中,使用await
关键字获取请求体(即上传的文件)。 - 将请求体传递给
FormData
类,使用append
方法添加到表单数据中。 - 将表单数据保存为文件。
示例代码如下:
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 模块。以下是该方法的简单步骤:
- 创建一个 HTTP 服务器实例,监听指定的端口。
- 在
onRequest
事件处理函数中,使用 Deno 的readFile
方法读取客户端请求的文件。 - 将文件内容写入响应流中,并设置适当的响应头。
示例代码如下:
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