gpt4 book ai didi

node.js - 不使用框架的纯 Node.js 文件上传(多部分 POST)

转载 作者:搜寻专家 更新时间:2023-10-31 22:25:00 25 4
gpt4 key购买 nike

第三方库“node-formidable”和“express”具有处理多部分 POST 请求的能力(例如,使用文件上传表单),但我不想使用任何第三方代码。如何在 Node.js 上使用纯 JavaScript 执行文件上传过程?

这方面的资源很少。如何才能做到这一点?谢谢,爱是。

最佳答案

只是澄清一下,因为似乎有些人对另一个答案没有多大帮助感到生气:没有简单的方法可以不依赖图书馆为您做这件事。

首先,这是对另一个问题的回答,试图阐明 POST 文件上传时发生的情况:https://stackoverflow.com/a/8660740/2071242

总而言之,要解析此类上传,您首先需要检查包含“multipart/form-data”的 Content-Type header ,如果存在,请读取 header 中的边界属性。

在此之后,内容分为多个部分,每个部分都以边界字符串开头,包括一些额外的标题,然后是空行之后的数据本身。只要上传的数据中不存在这样的字节序列,浏览器就可以非常自由地选择边界字符串(有关详细信息,请参阅 https://www.rfc-editor.org/rfc/rfc1867 的规范)。您可以通过为请求对象的数据事件注册回调函数来读取数据:request.on('data', callback);

例如,使用边界“QweRTy”,上传可能看起来像这样:

POST /upload HTTP/1.1
(some standard HTTP headers)
Content-Type: multipart/form-data; boundary=QweRTy

--QweRTy
Content-Disposition: form-data; name="upload"; filename="my_file.txt"
Content-Type: text/plain

(The contents of the file)
--QweRTy--

请注意在初始 header 之后如何将两个破折号添加到每个边界字符串的开头以及如何将两个破折号添加到最后一个字符串的末尾。

现在,让这个具有挑战性的是您可能需要读取多个 block 中的传入数据(在上面提到的回调函数中),并且不能保证边界将包含在一个 block 中。因此,您要么需要缓冲所有数据(不一定是个好主意),要么实现一个逐字节处理数据的状态机解析器。这实际上正是 formidable library is doing 的内容.

所以经过类似的考虑,我个人决定做的是使用库。重新实现这样的解析器非常容易出错,在我看来不值得付出努力。但如果你真的想避免使用任何库,检查 formidable 的代码可能是一个好的开始。

关于node.js - 不使用框架的纯 Node.js 文件上传(多部分 POST),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com