作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这几天我一直在尝试解决这个问题。我正在尝试在同一请求中执行文件上传和 POST 数据。我已经在 PHP 中完成了此操作,但现在我想在 Node.js 中完成此操作。我认为这可能与 header 或服务器设置有关,但没有任何效果。
我是如何做到这一点的:我开始使用 busboy
上传文件,效果非常好。使用 Content-Type: Multipart/form-data
和 form-data
主体,效果很好:
app.post('/api/v1/files/test', function (req, res, next) {
var busboy = new Busboy({ headers: req.headers });
// Listen for event when Busboy finds a file to stream.
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log(filename);
});
req.pipe(busboy);
});
这会在控制台中返回文件名并起作用。
(忽略我在正文中有 apiKey
的事实。这是我要修复的下一件事。)
如果我添加 console.log(req.body);
,它将返回 {}
。 我错过了什么?为什么 body 是空的?我已完成 req
,但找不到我的 key 的任何实例。
服务器设置文件如下所示:
... requires ...
// App
const app = express();
// File related
app.use(busboy());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); // maybe screwing it up?
... then path setup, and listen ...
如果您仍然不明白我想要做什么:
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="text" name="apiKey" />
<input type="file" name="file" />
<button type="submit>Done</button>
</form>
这就是 PHP 中的样子:
<?php
$apiKey = $_POST['apiKey'];
$file = $_POST['files']['file'];
?>
最佳答案
由于您使用的是 Busboy,请尝试安装 busboy-body-parser ,然后使用:
const busboyBodyParser = require('busboy-body-parser');
...
// Required to parse multipart/form-data for busboy
app.use(busboyBodyParser());
关于javascript - Node - multipart/form-data 上传文件但没有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45638558/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!