使用 HTML 将文件上传到 Node.js
Upload file to Node.js with HTML
我正在尝试制作一个 API 以使用 Node.js 服务器上传文件。我收到 undefined
回复。
我正在学习本教程https://www.youtube.com/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>
点击提交后我得到了 undefined
回复。
bodyParser.json()
… 所以你已经为 JSON 格式的请求设置了一个解析器
enctype="multipart/form-data"
…但您没有发出 JSON 格式的请求。
见the documentation for body-parser:
This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:
…后面是建议列表。
选择一个可以处理多部分请求的模块并使用它来代替您当前的选择。
我建议您使用 this module 来处理 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
});
另一种上传文件的方法可能是使用类似这样的东西
玉模板
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")
控制器
formidable = require('formidable'); //file upload handling via form
uuid = require('node-uuid'); //Unique ID
path = require('path'); //Path compiler
fs = require('fs'); //FileSystem
var form = new formidable.IncomingForm();
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
}));
});
我正在尝试制作一个 API 以使用 Node.js 服务器上传文件。我收到 undefined
回复。
我正在学习本教程https://www.youtube.com/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>
点击提交后我得到了 undefined
回复。
bodyParser.json()
… 所以你已经为 JSON 格式的请求设置了一个解析器
enctype="multipart/form-data"
…但您没有发出 JSON 格式的请求。
见the documentation for body-parser:
This does not handle multipart bodies, due to their complex and typically large nature. For multipart bodies, you may be interested in the following modules:
…后面是建议列表。
选择一个可以处理多部分请求的模块并使用它来代替您当前的选择。
我建议您使用 this module 来处理 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
});
另一种上传文件的方法可能是使用类似这样的东西
玉模板
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")
控制器
formidable = require('formidable'); //file upload handling via form
uuid = require('node-uuid'); //Unique ID
path = require('path'); //Path compiler
fs = require('fs'); //FileSystem
var form = new formidable.IncomingForm();
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
}));
});