我一直在試圖解決這個問題幾天了。我正在嘗試在相同請求中執行文件上傳和POST數據。我已經在PHP中完成了這個工作,但現在我想在Node.js中完成這項工作。我雖然可能是與標題或服務器設置的東西,但沒有任何工作。節點 - 多部分/表單數據上傳文件,但沒有數據
我怎麼到這裏:我開始使用文件上傳使用busboy
,它的作品完美。使用form-data
身體Content-Type: Multipart/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);
,它將返回{}
。 我錯過了什麼?爲什麼身體是空的?我已經通過req
並找不到我的密鑰的任何實例。
服務器設置文件看起來像這樣:
... 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'];
?>
你看看Multer:https://github.com/expressjs/multer,它很簡單,開門見山 –