NodeJS上传照片

NodeJS upload photo

我是 node 新手,上传照片时遇到很多问题;

这是我的代码:

 var express = require("express"),
    bodyParser = require('body-parser'),
     app = express();

 app.set('views', __dirname + '/Views');
 app.engine('html', require('ejs').renderFile);
 app.set('view engine', 'ejs');
 app.use(express.bodyParser());
 app.use( bodyParser.json() );       // to support JSON-encoded bodies
 app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
   extended: true
 })); 

 app.use(express.json());       // to support JSON-encoded bodies
 app.use(express.urlencoded());



app.post('/upload',function(request,response){

    response.writeHead(200, "OK", {'Content-Type': 'text/plain'});

    console.log(request.body);

    response.end();
});

这是 index.html 我的表格所在的地方:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
    <h1>Test Drive  Upload</h1>
    <form method="post" enctype="multipart/form-data" action="/upload">
    <input type="text" name="username">
    <input type="password" name="password">
    <input type="file" name="thumbnail">
    <input type="submit">
    </form>
</body>
</html>

每当我尝试上传照片并点击提交时,我都会查看我的控制台以查看正文中的内容(我希望对文件有一些提示!)但这是点击提交后的控制台

    { username: '', password: '' }

没有任何文件或图像的迹象

我也试过这个:

   console.log(request.files);
   console.log(request.form);

但两者都会在控制台中抛出 undefiend

您已设置 multipart/form-data 用于上传文件,但您启用的 none 中间件支持该内容类型。通常你会使用像 multiparty or busboy 这样的中间件来解析像你的图像这样的多部分请求数据。

不使用主体解析器的版本 1:

var express = require('express');
var http = require('http');
var app = express();

app.use(express.static('./public'));


app.configure(function(){
    app.use(express.methodOverride());
    app.use(express.multipart({
        uploadDir: './uploads',
        keepExtensions: true
    }));
});


app.use(app.router);

app.get('/upload', function(req, res){
    // Render page with upload form
    res.render('upload');
});

app.post('/upload', function(req, res){
    // Returns json of uploaded file
    res.json(req.files);
});

http.createServer(app).listen(3000, function() {
    console.log('App started');
});

使用正文解析器的版本 2:

var express = require('express')

var app = express()
app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/uploads' }))

app.get('/', function(req, res){
  res.send('<form method="post" enctype="multipart/form-data">'
    + '<p>Image: <input type="file" name="image" /></p>'
    + '<p><input type="submit" value="Upload" /></p>'
    + '</form>');
});

app.post('/', function(req, res, next){

    res.send('Uploaded: ' + req.files.image.name)
    return next()

});

app.listen(3000);
console.log('Express app started on port 3000');

这里有个好东西Tutorial | Upload Image using Node.js

快乐帮助!