Javascript Multer没有上传文件
我试图使用multer将一个文件从客户端的html表单上传到服务器端,multer模块在服务器端处理该文件 这里的问题是一切正常,因为我从服务器得到了200OK响应,但是文件应该上传到我的文件系统,我看不到它 这是我的html表单Javascript Multer没有上传文件,javascript,node.js,file,file-upload,multer,Javascript,Node.js,File,File Upload,Multer,我试图使用multer将一个文件从客户端的html表单上传到服务器端,multer模块在服务器端处理该文件 这里的问题是一切正常,因为我从服务器得到了200OK响应,但是文件应该上传到我的文件系统,我看不到它 这是我的html表单 <template> <div id="app"> <form action="http://localhost:3000/upload" method="post" enctype="multipart/form-data"
<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>
module.exports=路由器
更新
我在npm multer网站上更改了我的解决方案库(服务器端)
module.exports=路由器
谢谢你的帮助 您没有指定要上载的文件。输入
输入的名称
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')
您可能需要删除回调的第三个参数(null,Date.now()+file,callback)
,它是回调
,因为它可能会对程序进行调试,并将+文件
更改为类似+file.originalname
的内容,因为文件
是一个对象,计算机可能无法将对象与文件名联系起来
更新
主节点
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表单
<!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>
对于那些对multer没有将文件上传到目标文件夹有问题的人,我发现使用绝对路径而不是相对路径很有用
类似这样的内容(到节点js根目录的绝对路径)
公共/图片/图片
优于(相对路径)
../public/images/pics
或(相对路径)
/公众/图片/图片
这对我很有效您是否已将相应的读/写权限设置到您尝试上载文件的目标文件夹?是的,我没有收到任何错误,通常我会获得CORS,但我允许它出现在我的应用程序文件中,我不知道为什么不起作用。请尝试在文件后添加/
作为回调(null,../files/);
并查看它是否正常工作?仍然没有:/在传递请求上载之前,您能否尝试检查req.file.courseum
是否包含该文件检查我的更新,这些代码对我来说工作正常,您可能应该对upload
变量@costacosta进行一些更改
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;
})
<!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>