CREATE TABLE book_content (
content_number INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
content_name VARCHAR(200) NOT NULL,
content_path VARCHAR(200) NOT NULL,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
admin_number INT NOT NULL,
FOREIGN KEY (admin_number) REFERENCES admin (admin_number)
);
const multer = require("multer");
const fileStorage = multer.diskStorage({
destination: (req, file, cb) => {
let fileDest;
if (file.mimetype === "application/pdf") {
fileDest = "static/contents";
} else {
fileDest = "static/images";
}
cb(null, fileDest);
},
filename: (req, file, cb) => {
cb(null, file.filename + "-" + file.originalname);
},
});
const fileFilter = (req, file, cb) => {
if (
file.mimetype === "image/png" ||
file.mimetype === "image/jpg" ||
file.mimetype === "image/jpeg" ||
file.mimetype === "application/pdf"
) {
cb(null, true);
} else {
cb(null, false);
}
};
routes.post('/imageRegistAction', multer({ storage: fileStorage, fileFilter: fileFilter }).single("image"), imageController.imageRegistAction);
routes.post('/contentRegistAction', multer({ storage: fileStorage, fileFilter: fileFilter }).single("content"),contentController.contentRegistAction);
const Content = require("../../models/admin/content");
exports.getContentRegist = (req, res, next) => {
res.render("admin/regist/content", {
pageTitle: "E-Book Content Regist",
member: req.session.user,
admin: req.session.admin,
});
};
exports.contentRegistAction = (req, res, next) => {
let content = req.file;
let adminNumber = req.session.admin.admin_number;
Content.contentRegistAction(content, adminNumber, (err) => {
if (err) {
console.log("내용 등록 에러 : " + err);
} else {
console.log("내용 등록 성공!!");
res.render("admin/adminIndex", {
pageTitle: "Welcome E-book Admin Page",
member: req.session.user,
admin: req.session.admin,
});
}
});
};
module.exports = class Content {
constructor(contentName, contentPath) {
this.contentName = contentName;
this.contentPath = contentPath;
}
static contentRegistAction(content, adminNumber, cb) {
if (content) {
let contentName = content.originalname;
let contentPath = content.path;
let sql =
"INSERT INTO book_content (content_name, content_path, admin_number) VALUES (?, ?, ?)";
let param = [contentName, contentPath, adminNumber];
connection.query(sql, param, (err, row, fields) => {
if (err) {
console.log("내용 등록 쿼리 오류 : " + err);
} else {
console.log("내용등록 성공");
cb();
}
});
} else {
console.log("내용이 등록되지 않았습니다.");
}
}
};
<%- include('../../admin/includes/admin-head-nav.ejs')%>
<div class="container px-4 px-lg-5">
<div class="row gx-4 gx-lg-5 align-items-center my-5 ">
<form action="/contentRegistAction" method="POST" enctype="multipart/form-data">
<label for="content">책 내용</label>
<input type="file" name="content" id="content">
<button type="submit" class="btn btn-primary">등록하기</button>
</form>
</div>
</div>
<%- include('../../admin/includes/admin-footer.ejs')%>
최종적으로 등록되는 파일과 이미지