将nodeJs与express。
一起使用正文解析器正在解析POST数据。现在我想将收到的图像文件保存在名为images的快速应用程序的文件夹中。图像正在发布到nodeJs应用程序。当我在回调函数中查看res.body变量时,它包含图像,但我很困惑如何保存它。
我查看了stackflow但找不到任何答案。所以张贴了自己。
我尝试过使用fs库及其fs.writeFile()函数。它会保存文件,但它已全部损坏。
image1是发布数据中的图像名称。使用bodyparser()
var image = req.body.image1;
fs.writeFile('images/newImage.jpg', image, function(err){
if (err) throw err;
console.log('It is saved');
});
这会将文件保存在images目录中,但不是图像。
我使用curl将数据发布到nodejs应用程序,代码是
$curl = curl_init();
$data = array('name' => 'First','file' => "image1=@".__dir__."/images/1.jpg");
curl_setopt($curl, CURLOPT_URL, "http://localhost:3000/api/");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);
curl_close($curl);
我正在记录两个console.log函数
console.log(req.files);
console.log(req.body);
并且日志给出
{}
{ name: 'First',
file: 'image1=@C:\\xampp\\htdocs\\curltest/images/1.jpg' }
请帮助这让我发疯: - /
答案 0 :(得分:2)
首先,fs.writeFile
的正确参数顺序是文件名,然后是内容。
如果您使用express.bodyParser()
,则会在req.files
字段中显示已上传的文件。
当然你应该写回调:
fs.writeFile('newImage', req.files.image, function (err) {
if (err) throw err;
console.log("It's saved");
});
您还应检查HTML方面,因为表单的编码必须为multipart/form-data
。
示例:
<form action="/somewhere/to/post" method="post" enctype="multipart/form-data">
<input type="file" name="image1"/>
<input type="submit"/>
</form>
答案 1 :(得分:0)
如果您使用Express 4,则不包括bodyParser, 但你真正需要的是使用多方包,我使用this和 你的代码将是这样的:
在你的POST路由器中
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
if(err){
res.status(500).send('not file');
}
res.send(util.inspect({fields: fields, files: files}));
});
希望这会有所帮助