2017-08-11 89 views
0

我一直在试图解决这个问题几天了。我正在尝试在相同请求中执行文件上传和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); 
}); 

这将返回控制台和作品文件名。

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

(。忽略了一个事实我有身体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']; 
?> 
+0

你看看Multer:https://github.com/expressjs/multer,它很简单,开门见山 –

回答

1

由于您使用的打杂,尝试安装busboy-body-parser,则u SE:

const busboyBodyParser = require('busboy-body-parser'); 

... 

// Required to parse multipart/form-data for busboy 
app.use(busboyBodyParser()); 
+0

这的确解决了我的问题与空白身体,但它不”允许文件上传。任何想法如何使用这个,仍然做文件上传? – Keith

+0

我收回了,这工作完美。我刚刚检查了'req.files'并且它存在。这是解决方案。谢谢你的帮助。 – Keith

相关问题