Multer没有上传文件

我试图用multer从客户端的html表单上传文件到服务器端,multer模块处理服务器端的文件。

这里的东西是一切都好,因为我得到了从服务器的200 OK响应,但该文件应该上传到我的文件系统,我看不到它。

这是我的HTML表单

<template> <div id="app"> <form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data"> <h2>Select a file</h2> <input name="curriculum" id="inputVal" type="file"> <button type="submit">Send</button> </form> </div> </template> 

我的服务器端代码

 var express = require('express'); var router = express.Router(); var path = require('path'); var fs = require('fs'); var multer = require('multer') var storage = multer.diskStorage({ destination: function(req,file,callback) { callback(null, '../files'); }, filename: function(req,file,callback) { callback(null,Date.now() + file,callback); } }) var upload = multer({ storage: storage }).single('curriculum'); router.post('/upload', function (req, res, next) { upload(req,res, function(err){ if(err) { return res.status(404).send("a error ocurred"); } res.status(200).send("file uploaded"); }); }); 

module.exports = router;

UPDATE

我改变了我的解决scheme基地不要npm multer网站(服务器端)

 var express = require('express'); var router = express.Router(); var path = require('path'); var fs = require('fs'); var multer = require('multer') var upload = multer({ dest: 'uploads/' }); router.post('/upload',upload.single('curriculum') ,function (req, res, next) { console.log(req.files); }); 

module.exports = router;

泰求救!

您没有指定要上传的文件。 把input的名字。

 router.post('/upload', upload.single('curriculum'), function (req, res, next) { if(err) { console.log(err); return res.status(404).send("a error ocurred"); } console.log(req.file); res.status(200).send("file uploaded"); }); 

同样在你的文件名中,确保你的文件以.png.jpeg类的扩展名结尾,否则你会看到一堆没有任何意义的字节码。

您可以使用file.originalname客户端提供的确切文件名

 cb(null, file.originalname) 

或者你可以明确地添加它。

 callback(null, file.fieldname + '-' + Date.now() + '.png') 

你可能想删除callback(null,Date.now() + file,callback)的第三个参数callback(null,Date.now() + file,callback) ,因为它可能会窃听程序,并将+ file改为+ file.originalname因为file是一个对象并且计算机可能在将对象指向文件名时遇到问题。

UPDATE

主要NODEJS

 var express = require('express') var multer = require('multer') var app = express() var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, __dirname + '/uploads') //you tell where to upload the files, }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now() + '.png') } }) var upload = multer({storage: storage, onFileUploadStart: function (file) { console.log(file.originalname + ' is starting ...') }, }); app.set('view engine', 'ejs'); app.get('/', function(req, res, next){ res.render('mult'); //our html document }) app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file is the `avatar` file console.log(req.file); return false; }) 

HTML FORM

 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head> <body> <form accept="image/x-png,image/gif,image/jpeg" enctype="multipart/form-data" action="/profile" method="post"> <input type="file" name="avatar" value=""> <input type="submit" name="" value="ssss"> </form> </body> </html>