当我在Node.js中上传文件时,Formidable总是返回空字段和文件
基本上我想从本地计算机上传一个csv文件,并在后台parsing它来做必要的操作。 我在前端连接了csv文件。 检查了它不是空的。 但我无法在服务器中获取相同的内容。 有什么我失踪或做错的方式吗?
这是我迄今为止所尝试的。
前端代码:
<form id="myForm" method="POST" enctype="multipart/form-data" action='/testcsv' > <input type="file" id="file" /> <input type="submit" value="Submit"> </form>
后端代码:
var express = require('express'); var methodOverride = require('method-override'); var http = require('follow-redirects').http; var formidable = require('formidable'); var app = express(); const fs = require('fs'); app.use(methodOverride('_method')); var bodyParser = require('body-parser'); app.use(bodyParser.json()); // support json encoded bodies app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies app.post('/testcsv', requireLogin, function(req, res) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { console.log(err); console.log(fields); console.log(files); }); });
日志输出:
null {} {}
这个问题是由前端代码引起的,与后端代码无关(强大)。
对于以下console.log语句:
console.log(err); console.log(fields); console.log(files);
-
err
是null
因为没有错误。 -
fields
是{}
因为在表单中,所有input字段都是文件select器。 强大的fields
只能表示简单的input字段,如<input type="text">
。 -
files
是{}
因为表单中文件select器的name
缺失。
为了获得预期的价值,下面是一个示例表单:
<form id="myForm" method="POST" enctype="multipart/form-data" action='/testcsv' > <input type="text" name="testtext" /> <input type="file" id="file" name="testfile" /> <input type="submit" value="Submit"> </form>
上述表单的console.log
结果是:
null { testtext: '....' } { testfile: File....}