admin管理员组文章数量:1023213
I'm trying to make an API to upload file using Node.js server. I get undefined
response.
I am following this tutorial
Node.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post("*", function(req, res) {
res.end(JSON.stringify(req.files) + "\n");
});
console.log("Server at 8080");
app.listen(8080);
HTML
<html>
<head>
<form method="post"
enctype="multipart/form-data"
action="http://localhost:8080">
<input type="file" name="myimage" />
<input type="submit" name="submit" value="submit"/>
</form>
</head>
</html>
After clicking submit I got undefined
response.
I'm trying to make an API to upload file using Node.js server. I get undefined
response.
I am following this tutorial https://www.youtube./watch?v=UtfZ-5WKpro
Node.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post("*", function(req, res) {
res.end(JSON.stringify(req.files) + "\n");
});
console.log("Server at 8080");
app.listen(8080);
HTML
<html>
<head>
<form method="post"
enctype="multipart/form-data"
action="http://localhost:8080">
<input type="file" name="myimage" />
<input type="submit" name="submit" value="submit"/>
</form>
</head>
</html>
After clicking submit I got undefined
response.
2 Answers
Reset to default 5bodyParser.json()
… so you've set up a parser for JSON formatted requests
enctype="multipart/form-data"
… but you aren't making a JSON formatted request.
See the documentation for body-parser:
This does not handle multipart bodies, due to their plex and typically large nature. For multipart bodies, you may be interested in the following modules:
… which is followed by a list of suggestions.
Pick a module which can handle multipart requests and use that instead of your current choice.
I remend you to use this module for handling file upload in Node/Express.
var fileupload = require('fileupload').createFileUpload('/uploadDir').middleware;
app.post('/upload', fileupload, function(req, res) {
// files are now in the req.body object along with other form fields
// files also get moved to the uploadDir specified
});
Another way to upload files could be using something like this
Jade template
form.data(action='/user/register', method='post', class="long-fields", enctype='multipart/form-data')
input(type="text" name="name")
input(name='fileLogo', type='file')
input(type="submit" value="Register")
Controller
formidable = require('formidable'); //file upload handling via form
uuid = require('node-uuid'); //Unique ID
path = require('path'); //Path piler
fs = require('fs'); //FileSystem
var form = new formidable.IningForm();
form.keepExtensions = false;
form.maxFieldsSize = 2 * 1024 * 1024; //2mb
form.parse(req, function(err, fields, files) {
console.log(fields);
console.log(files);
fs.readFile(files.fileLogo.path, function (err, data) {
var pathNew = __dirname + '/../../uploads/' + uuid.v1() + path.extname(files.fileLogo.name);
fs.writeFile(pathNew, data, function (err) {
console.log('uploaded', pathNew);
});
});
res.send(jade.renderFile(settings.pathLess + prefix + '/register.jade', {
req: req
}));
});
I'm trying to make an API to upload file using Node.js server. I get undefined
response.
I am following this tutorial
Node.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post("*", function(req, res) {
res.end(JSON.stringify(req.files) + "\n");
});
console.log("Server at 8080");
app.listen(8080);
HTML
<html>
<head>
<form method="post"
enctype="multipart/form-data"
action="http://localhost:8080">
<input type="file" name="myimage" />
<input type="submit" name="submit" value="submit"/>
</form>
</head>
</html>
After clicking submit I got undefined
response.
I'm trying to make an API to upload file using Node.js server. I get undefined
response.
I am following this tutorial https://www.youtube./watch?v=UtfZ-5WKpro
Node.js:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.post("*", function(req, res) {
res.end(JSON.stringify(req.files) + "\n");
});
console.log("Server at 8080");
app.listen(8080);
HTML
<html>
<head>
<form method="post"
enctype="multipart/form-data"
action="http://localhost:8080">
<input type="file" name="myimage" />
<input type="submit" name="submit" value="submit"/>
</form>
</head>
</html>
After clicking submit I got undefined
response.
2 Answers
Reset to default 5bodyParser.json()
… so you've set up a parser for JSON formatted requests
enctype="multipart/form-data"
… but you aren't making a JSON formatted request.
See the documentation for body-parser:
This does not handle multipart bodies, due to their plex and typically large nature. For multipart bodies, you may be interested in the following modules:
… which is followed by a list of suggestions.
Pick a module which can handle multipart requests and use that instead of your current choice.
I remend you to use this module for handling file upload in Node/Express.
var fileupload = require('fileupload').createFileUpload('/uploadDir').middleware;
app.post('/upload', fileupload, function(req, res) {
// files are now in the req.body object along with other form fields
// files also get moved to the uploadDir specified
});
Another way to upload files could be using something like this
Jade template
form.data(action='/user/register', method='post', class="long-fields", enctype='multipart/form-data')
input(type="text" name="name")
input(name='fileLogo', type='file')
input(type="submit" value="Register")
Controller
formidable = require('formidable'); //file upload handling via form
uuid = require('node-uuid'); //Unique ID
path = require('path'); //Path piler
fs = require('fs'); //FileSystem
var form = new formidable.IningForm();
form.keepExtensions = false;
form.maxFieldsSize = 2 * 1024 * 1024; //2mb
form.parse(req, function(err, fields, files) {
console.log(fields);
console.log(files);
fs.readFile(files.fileLogo.path, function (err, data) {
var pathNew = __dirname + '/../../uploads/' + uuid.v1() + path.extname(files.fileLogo.name);
fs.writeFile(pathNew, data, function (err) {
console.log('uploaded', pathNew);
});
});
res.send(jade.renderFile(settings.pathLess + prefix + '/register.jade', {
req: req
}));
});
本文标签: javascriptUpload file to Nodejs with HTMLStack Overflow
版权声明:本文标题:javascript - Upload file to Node.js with HTML - Stack Overflow 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/questions/1745599282a2158359.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论