在 Deno 中,我们可以使用标准库中的 formidable
模块来处理文件上传,其中还依赖了 mime
模块来解析文件类型。本文将为您详细讲解如何使用这些模块来实现文件上传功能,并附有完整的示例代码。
安装模块
在开始之前,我们需要先安装 formidable
和 mime
模块。
安装 formidable
:
deno install --allow-read --allow-net --name=formidable https://deno.land/x/formidable/mod.ts
安装 mime
:
deno install --allow-read --name=mime https://deno.land/std/mime/mod.ts
实现文件上传
首先,我们需要创建一个 HTTP 服务器来接收上传的文件。
import { serve } from "https://deno.land/std/http/server.ts"; const server = serve({ port: 3000 }); console.log("http://localhost:3000/"); for await (const req of server) { // 此处处理上传文件 }
接下来,我们要在服务器中实现文件上传功能。这里我们使用 formidable
模块来处理上传请求。
-- -------------------- ---- ------- ------ - ---------- - ---- ---------------------------------------- ------ - ------- - ---- ------------------------------------ ------ - ------- - ---- ----------------------------------- ------ - ----- - ---- --------------------------------------- ----- ------ - ------- ----- ---- --- -------------------------------------- --- ----- ------ --- -- ------- - ----- ---- - --- ---------------- ----- ----- - ----- ------------- ----- ---- - --------------- ----- ------ - ----- ---------------------- ----- -------- - ----------------------------------------- ---------------------------- -------- -
上面这段代码中,我们使用 Formidable
构造函数初始化一个 Formidable 实例来解析请求中的文件。Formidable
的 parse
方法会返回一个 Promise
,它会解析出请求中的所有文件。我们从中选取第一个文件,并从中读取出其内容,然后将其写入到以时间戳命名的文件中。
给用户反馈
在实现上传功能后,我们应该给用户一些反馈来告知他们文件是否上传成功。在 HTTP 服务器中,我们可以通过 req.respond
方法来向客户端发送 HTTP 响应。
-- -------------------- ---- ------- ------ - ---------- - ---- ---------------------------------------- ------ - ------- - ---- ------------------------------------ ------ - ------- - ---- ----------------------------------- ------ - ----- - ---- --------------------------------------- ----- ------ - ------- ----- ---- --- -------------------------------------- --- ----- ------ --- -- ------- - ----- ---- - --- ---------------- ----- ----- - ----- ------------- -- ------------------- --- -- - ------------- ------- ---- ----- --- ------ --- - ---- - ----- ---- - --------------- ----- ------ - ----- ---------------------- ----- -------- - ----------------------------------------- ---------------------------- -------- ------------- ----- --------- ------------ --- - -
如果上传成功,我们会按照之前的方法将文件写入到本地,并向客户端发送一个响应。相反地,如果上传文件的数量为零,则我们将向客户端发送一个状态码为 400
的错误响应。这样,我们可以让用户知道他们的请求中缺少了必要的信息。
总结
在本文中,我们学习了如何使用 formidable
模块来处理文件上传,并给出了完整的示例代码。此外,我们也介绍了如何向客户端发送 HTTP 响应,使用户能够得到有关文件上传操作的反馈信息。希望本文能够对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6500358295b1f8cacde67705