如何从未定义的表单中获取req.body
How can I get a req.body from a form that is not undefined?
每当我提交一个包含信息的表单时,它都会以未定义的形式返回。我已经在下面发布了代码。如果我在表单中包含(enctype="multipart/form-data"),我不会收到任何正文(req.body)。但是,如果我不包含它,我会收到一个正文,但文件处理不起作用,页面只是继续加载。
app.post('/processupload', function(req, res) {
var date = new Date();
titles.push(req.body.pTitle);
descriptions.push(req.body.postDescription);
dates.push(date.toString());
file_names.push(req.body.fUpload);
console.log(req);
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files)
{
if(err) return res.redirect(303, '/error');
});
form.on('end', function(fields, files)
{
var temp_path = this.openedFiles[0].path;
var file_name = this.openedFiles[0].name;
var new_location = __dirname + '/public/images/';
fs.copy(temp_path, new_location + file_name);
res.redirect(303, 'home');
});
});
<form action="/processupload" enctype="multipart/form-data" method="POST" id="uploadForm" name="postForm">
<p align="center" id="pUploadForm" name="pPostForm"><label for="photoTitle">Photo Title: </label>
<input type="text" id="photoTitle" name="pTitle"><br>
<br><input type="file" id="fileUpload" name="fUpload"><br>
<br><label for="photoCaption">Photo Caption: </label><br>
<textarea rows="10" cols="50" id="photoCaption" name="postDescription"></textarea><br><br>
</p>
</form>
几周前我创建了一个上传照片的项目。我使用了Angular和Node。但在没有Angular的情况下,它应该仍然可以工作,只使用Node。我使用了multer npm包。
var AWS = require('aws-sdk');
var s3 = new AWS.S3();
var multer = require('multer');
var upload = multer({ storage: multer.memoryStorage() }); //Save photo in memory
router.post('/processupload', upload.single('photo'), function(req, res, next){
var bucketName = process.env.BUCKET_NAME;
var file = req.file;
var filename = file.originalname;
var ext = _.last(filename.split('.'))
var keyName = uuid.v4() + '.' + ext;
var url = process.env.AWS_URL + bucketName + '/' + keyName;
var params = { Bucket: bucketName, Key: keyName, Body: file.buffer, ACL: 'public-read' };
s3.putObject(params, function(err, data) {
if (err){
return res.status(400).send(err)
} else{
console.log("Successfully uploaded data to myBucket/myKey");
console.log("The URL is", url);
res.send(url)
}
});
});
这帮助我上传了图片,然后给了我S3 Bucket中的图片url。但是你可以随心所欲地处理这个文件。Multer允许您访问req.file
,这样您就可以做任何需要做的事情,在这个例子中,我创建了一个唯一的id,以便获得一个发送回前端的url,从而以某种方式将其用作源。这是一个使用此代码的表单:
<form action="/testupload" method='post' enctype='multipart/form-data'>
<input type="file" name="photo" id="photo" multiple=false>
<button type="submit">Submit</button>
</form>
通过表单中的name="photo"
调试需要很长时间的重要内容必须由upload.single('photo')
中间件反映出来。我希望这能有所帮助,有很多方法可以解决这个问题,这只是其中之一。
来源:https://www.npmjs.com/package/multerhttp://docs.aws.amazon.com/AmazonS3/latest/UG/UploadingObjectsintoAmazonS3.html
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jquery试图按名称获取按钮位置
- 如何在jQuery中获取元素的形式
- 如何在php文件中获取$.post-ajax传递的值
- 在Shopify中获取博客文章的图片
- 使用Javascript获取所选选项ID
- 在jQuery中获取表的行索引
- 使用jquery将mysql数据获取到新的表行中
- 在动态创建的元素上获取对特定选择器的引用
- 从城市名称获取惊喜
- Angular只从数组中获取所需的数据
- 无法将数据从firebase获取到我的html页面
- 从ajax请求中获取javascript对象
- 如何从画布上的某个移动事件中获取X和Y
- 如何从未定义的表单中获取req.body
- 无法使用快递和猫鼬进行路由,请继续获取"类型错误:req.params.user不是函数;
- 我无法从nodejs + expressjs中的req.body获取数据
- 在ExpressJS中按顺序获取req.params
- 如何在快速节点服务器中获取“req”的参数
- 获取护照登录中req.logIn()后的空数组