我在index.html文件上有文件提交表单。选择文件后,我需要说“文件已上传”,否则需要显示“请上传文件”
app.js
const express = require("express");
const app = express();
const http = require("http").Server(app).listen(3000);
app.use(express.urlencoded());
app.use(express.json());
console.log("Server Started");
app.get("/", function (req, res) {
res.sendFile(__dirname + "/index.html");
}
)
app.post("/", function (req, res) {
if (req.files) {
console.log(req.files);
const file = req.files.filename;
const filename = file.name;
if (!filename) {
res.send("Please select the file to upload");
}
else {
res.send("uploaded");
}
}
})
index.html
<div>
<h1 style="align-content: center">Upload your file here!</h1>
</div>
<div >
<form label="upload" method="post" enctype="multipart/form-data" action="/">
<label> Enter reference</label>
<input type="text" name="test_text"></input>
<br><br>
<input type="file" name="filename">
<input type="submit" value="upload">
</form>
</div>
错误消息:
TypeError: Cannot read property 'name' of undefined at C:\Users\Desktop\LocalGithub\uploadFileLocal-express-fileupload\app.js:24:27
答案 0 :(得分:2)
以下内容摘自快速文档:
在Express 4中,默认情况下req.files在req对象上不再可用。要访问req.files对象上的已上传文件,请使用多部分处理中间件,例如busboy,multer,emmable,multiparty,connect-multiparty或pez。
如前所述,我建议您使用multer,因为它更受欢迎且易于使用
编辑:
如果您使用的是“ express-fileupload”中间件,则必须通过.use()
方法进行加载:
const express = require("express");
const app = express();
const http = require("http").Server(app).listen(3000);
const fileUpload = require('express-fileupload');
^^^^^
app.use(express.urlencoded());
app.use(express.json());
app.use(fileUpload({
^^^
useTempFiles : true,
tempFileDir : '/tmp/'
}));
...
检查docs以获得更多详细信息:
答案 1 :(得分:0)
请尝试将file.name
替换为req.files[0].originalname
。
答案 2 :(得分:0)
您没有创建定义了属性名称的对象。 对象:req.files.filename,属性:req.files.filename.name 应该可以正常工作。 你的代码应该是这样的:
app.post("/", function (req, res) {
if (req.files.filename) { //missing filename
console.log(req.files.filename); //missing filename
const file = req.files.filename;
const filename = file.name;
...
});