【发布时间】:2015-10-31 02:29:13
【问题描述】:
看完这篇文章: http://lollyrock.com/articles/express4-file-upload/
我发现,当您不知道要上传的表单字段的名称时,Multer 曾经允许上传文件。例如,如果您查看文章的“使用 Multer”部分,您会发现作者在调用 app.use() 时并没有使用 .single()、.array() 或 .fields()。如果您使用当前版本的 Multer 执行此操作,您将收到错误 TypeError: app.use() requires middleware functions。
虽然我对如何使用 .single()、.array() 或 .fields() 有一点想法,但我当前的项目要求我向服务器发送不特定数量的文件(可能是一系列 @987654331 @ 或 .log 文件)。因此,我事先不知道字段名称是什么。
使用文章中使用的 Multer 版本 (0.1.6) 很容易做到这一点,但在当前版本的 Multer (1.0.3) 中尝试这样做似乎是不可能的,因为您需要指定表单字段名。
另外,在线查找 Multer 的完整指南一直是一项挑战,因为最好的似乎是 GitHub 存储库的自述文件,而似乎缺少该自述文件。也许我正在寻找的答案会在某个地方的指南中。
谢谢!
【问题讨论】:
-
为什么你不能控制字段名?显然,您无法控制 文件 名称。你是这个意思吗?
-
我的意思是字段名称。而且我无法控制字段名称,因为我不确定我会收到多少文件。编辑:我正在仔细研究 .fields() ,这可能是我正在寻找的答案。但我需要为此控制文件名。
-
如果您使用
multer().array('foo'),那么您可以拥有任意数量的文件,只要每个文件的字段名称相同(foo)。确定要求客户端为每个文件使用相同的字段名称不是不可能的吗? -
这可能是我需要强制执行的事情,但这是可行的。
-
@SammyI。 Multer 是专门编程的,因此由于Issue 133 中概述的安全原因,您需要事先了解这些字段。虽然我们也许可以添加一个
.any()方法,但我宁愿把它排除在外。似乎@mscdex 提出的方式就是要走的路。有什么理由不适合你吗?
标签: javascript node.js express multer