问题描述
我正在尝试创建一个简单的表单,它可以使用 Node.js 一起上传文件(pdf 和图像)和文本。尽管如此,我不想将 pdf 文件保存到 MysqL 数据库,而是希望它保存在我的内部存储“./uploads”文件夹中。我用过 npm foridable、mv 和 multer,但没有任何效果,有人知道为什么吗?
这是我的 html 表单
<form action="/auth/registerEvent" method = "POST">
<h5> Enter Your Event information</h5>
<div class="form-group">
<label for="eventName">Event Name</label>
<input type="text" class="form-control" id="eventName" name="eventName" placeholder="Event Name">
</div>
<div class="form-group">
<label for="eventDescription">Description</label>
<textarea class="form-control" id="eventDescription" name="eventDescription" placeholder="Event Description: No more than 200 words" rows="3"></textarea>
</div>
<div class="form-group">
<label for="eventPoster">Poster</label>
<input type="file" class="form-control" id="eventPoster" name="eventPoster" enctype="multipart/form-data" accept=".jpg,.png,.jpeg">
</div>
<div class="form-group">
<label for="eventProposal">Sponsor Proposal</label>
<input type="file" class="form-control" id="eventProposal" name="eventProposal" enctype="multipart/form-data" accept=".pdf">
</div>
<br>
<button type="submit">Submit</button>
</form>
这是我的 app.js
const express = require('express');
const path = require('path');
const app = express();
const MysqL = require('MysqL');
const dotenv = require('dotenv');
dotenv.config({path: './.env'}); // connect to .env
// set views folder
app.set('view engine','html');
app.engine('html',require('hbs').__express);
// set the directory to css and js
const publicDirectory = path.join(__dirname,'./public');
app.use(express.static(publicDirectory));
// Parse URL encoded bodies (as sent by HTML Form)
app.use(express.urlencoded({extended: false}));
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
// Define routes
app.use('/',require('./router/pages.js'));
app.use('/auth',require('./router/auth.js'));
// connect to MysqL
const db = MysqL.createConnection({
host: process.env.LOCALHOST,user: process.env.USER,password: process.env.PASSWORD,database: process.env.DATABASE,});
db.connect( (err) => {
if (err) console.log(err);
else console.log('Database is connected');
} )
// laptop server
app.listen(3000,(req,res)=>{
console.log('Server is running at localhost:3000');
});
最后是“auth.js”
const formidable = require('formidable');
const fs = require('fs');
const MysqL = require('MysqL');
const db = MysqL.createConnection({
host: process.env.LOCALHOST,});
exports.registerEvent = (req,res) => {
const {
eventName,eventInstitution,// eventStartDate,eventEndDate,eventAddress,eventDescription,eventPoster,eventProposal,// eoName,eoPhone,eoEmail
} = req.body;
if (req.url === "/registerEvent") {
const form = new formidable.IncomingForm();
form.parse(req,function (err,fields,files) {
const oldpath = eventPoster.path;
const newPath = './uploads' + eventPoster;
fs.rename(oldpath,newPath,function (err) {
if (err) throw err;
});
})
}
// db start
db.query('INSERT INTO registerevent SET ? ',{
EventName: eventName,Institution: eventInstitution,// StartDate: eventStartDate,// EndDate: eventEndDate,Address: eventAddress,Description: eventDescription,// Poster: eventPoster,// Proposal: eventProposal,// ContactName: eoName,// PhoneNumber: eoPhone,// Email: eoEmail,},(error,result) => {
if (error) { console.log(error); }
else {
res.statusCode = 302;
res.setHeader("Location","/Feedback");
res.end();
}
});
// db end
}
所以当客户输入姓名和地址时,它会转到 sql,并且海报和提案文件将被发送到我的“/uploads”目录。请帮忙
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)