node.js 多文件上传不起作用

标签 node.js express multer

<form action="http://localhost:3000/examples" method="post" enctype="multipart/form-data" accept="application/json">
    <input type="text" name ="name">
    <input type="text" name ="codedescription">
    <input type="file" name ="file">
    <input type="submit" value="Upload selected file to server">
</form>

var multer  = require('multer');
    app.use(multer({ dest: './uploads/',
        onFileUploadStart : function(file){
            console.log('File recieved:');
            console.log(file);
        },
        onFileUploadData:function (file,data){
            console.log('Data recieved');
        },
        onParseEnd: function(req,next){
            next();
        }
    }));
app.route('/examples').post(users.requiresLogin, examples.create);

exports.create = function(req, res) {
        console.log("req.files"+req.files);
        console.log("req.name"+req.body.name);
        console.log("req.codedescription"+req.body.codedescription);
    };

提交没有 enctype="multipart/form-data"的表单可以正常工作,但我无法获取文件。

使用 enctype="multipart/form-data"提交表单可以正常工作,但我无法获取文件和数据。

最佳答案

你可以试试这个

<html>
<head>
<title>FileUpload</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
</head>
<body>
<form id       =  "uploadForm"
     enctype   =  "multipart/form-data"
     action    =  "http://localhost:3000/api/photo"
     method    =  "post"
>
<input type="file" name="userPhoto" multiple />
<input type="submit" value="Upload Image" name="submit" id="btnUpload">
<span id="spnStatus" />
</form>

<script>
        $(document).ready(function(){
            $('#btnUpload').click(function(){
                $('#spnStatus').empty().text("File is Uploading");
                $(this).ajaxSubmit({
                 error : function(xhr){
                    status('Error : '+xhr.status);
                    }

                 success : function(response){
                    $('#spnStatus').empty().text(xhr);
                    }
                });
            });

        });
    </script>
</body>
</html>

NodeJS Express

var express =   require("../node_modules/express");
var multer  =   require('../node_modules/multer');
var bodyParser =    require("../node_modules/body-parser");
var app =   express();
app.use(bodyParser.json());


var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});
var upload = multer({ storage : storage }).array('userPhoto',8);

app.get('/',function(req,res){
      res.sendFile(__dirname + "/fileUpload.html");
});

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

          upload(req,res,function(err) {
            if(err) {
              console.log(err);
                return res.end("Error uploading file.");
            }
            res.end("File is uploaded");
         });
});

app.listen(3001,function(){
    console.log("Working on port 3001");
});

现在一次最多可以上传 8 个文件,如果要上传超过 8 个,只需编辑 var upload = multer({ storage : storage }).array('userPhoto','LIMITHERE') ;

关于node.js 多文件上传不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27978406/

相关文章:

javascript - 从 .catch(error) 返回未在 Node/Express 中返回

javascript - 发送后无法设置 header

node.js - 如何使用请求将文件从 Node 发送到 Amazon S3?

node.js - 不能使用 dropzone 和 multer 进行多重上传

node.js - 将 Nodejs 模块(例如assert 和paralleljs)与Titanium appcelerator 一起使用的步骤

javascript - 访问 Express 中的 get 请求返回的对象中的元素时遇到问题

javascript - 如何将对象数组传递给nodejs并将数组发送到mongo中的文档

node.js - 为什么 formData 不能处理多个文件?

Node.js 错误 : Unexpected field

javascript - 我如何使用 Node.js Express 压缩中间件?