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>