gpt4 book ai didi

javascript - Node - multipart/form-data 上传文件但没有数据

转载 作者:行者123 更新时间:2023-12-03 03:40:49 27 4
gpt4 key购买 nike

这几天我一直在尝试解决这个问题。我正在尝试在同一请求中执行文件上传和 POST 数据。我已经在 PHP 中完成了此操作,但现在我想在 Node.js 中完成此操作。我认为这可能与 header 或服务器设置有关,但没有任何效果。

我是如何做到这一点的:我开始使用 busboy 上传文件,效果非常好。使用 Content-Type: Multipart/form-dataform-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);
});

这会在控制台中返回文件名并起作用。

下一步是添加常见的附加信息。该请求如下所示: enter image description here

(忽略我在正文中有 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/

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