From 4d1d4c1e794d0ab54d5b37f4912f02e5ca4560b1 Mon Sep 17 00:00:00 2001 From: Ting-Jun Wang Date: Sun, 1 Sep 2024 19:45:43 +0800 Subject: [PATCH] feat: download uploaded files --- api/audit.js | 1 + api/download.js | 34 ++++++++++++++++++++++++++++++++++ api/main.js | 7 +++++-- index.js | 2 ++ js/audit.js | 45 ++++++++++++++++++++++++++++++++++----------- js/main.js | 2 ++ 6 files changed, 78 insertions(+), 13 deletions(-) create mode 100644 api/download.js diff --git a/api/audit.js b/api/audit.js index f6f31e8..146431d 100644 --- a/api/audit.js +++ b/api/audit.js @@ -18,6 +18,7 @@ router.get("/", async function(req, res) { item_form.subsidy, scholarship_application.application_date, scholarship_application.student_id, + scholarship_application.supplement_filename, student.student_name, audit_form.committee_review, advisor.advisor_name, diff --git a/api/download.js b/api/download.js new file mode 100644 index 0000000..f6b64ba --- /dev/null +++ b/api/download.js @@ -0,0 +1,34 @@ +const path = require('path'); +const router = require('express').Router(); +const fs = require('fs'); + + +router.get("/", async function(req, res) { + const filename = req.query.filename; + console.log(filename); + const filePath = path.join('uploads', filename); + console.log(filePath); + + if (filename) { + fs.access(filePath, fs.constants.F_OK, (err) => { + if (err) { + console.error('檔案不存在:', err); + res.status(404).send('檔案不存在'); + } else { + res.download(filePath, (err) => { + if (err) { + console.error('檔案下載失敗:', err); + res.status(500).send('檔案下載失敗'); + } else { + console.log("downloaded"); + } + }); + } + }); + } else { + res.status(400).send('缺少 filename 參數'); + } + + +}); +module.exports = router; diff --git a/api/main.js b/api/main.js index 0997090..b05752b 100644 --- a/api/main.js +++ b/api/main.js @@ -43,10 +43,13 @@ router.post("/", upload.single('file'), async function(req, res) { console.log(req.body); if (req.file){ - console.log("Upload file: " + req.file.originalname); + console.log("Upload file: " + req.file.filename); + var upload_file_name = req.file.filename; } else { console.log("No file"); + var upload_file_name = ""; } + console.log(upload_file_name); // data const apply_infos_str = req.body.apply_infos; // get data from request const application_units_str = req.body.application_units; @@ -71,7 +74,7 @@ router.post("/", upload.single('file'), async function(req, res) { } // insert data into table : scholarship_application - const scholarship_application_info = await conn.batch("INSERT INTO scholarship_application(`application_date`, `student_id`) VALUES(?, ?);", [time, student_id]); + const scholarship_application_info = await conn.batch("INSERT INTO scholarship_application(`application_date`, `student_id`, `supplement_filename`) VALUES(?, ?, ?);", [time, student_id, upload_file_name ]); const scholarship_application_id = scholarship_application_info.insertId; // get the application_id of previous record // 這邊你們要再改 diff --git a/index.js b/index.js index 8c75179..7bed52c 100644 --- a/index.js +++ b/index.js @@ -25,6 +25,8 @@ app.use("/api/login", require("./api/login.js")); app.use("/api/example", require("./api/example.js")); app.use("/api/main", require("./api/main.js")); app.use("/api/audit", require("./api/audit.js")); +app.use("/api/download", require("./api/download.js")); + // // static files app.use('/js', express.static('./js')); app.use('/css', express.static('./css')); diff --git a/js/audit.js b/js/audit.js index f43d14f..ee1a2ed 100644 --- a/js/audit.js +++ b/js/audit.js @@ -1,6 +1,6 @@ let item_info_len = 0; -let all_audit_data = null; +var all_audit_data = null; let current_review_apllication_id; const application_detail_init_table_content = document.getElementById("application_detail").innerHTML; let assistant_s_num; @@ -31,12 +31,11 @@ async function getAuditedItemInfo() { } } -function combineSameAppData(data) { +async function combineSameAppData(data) { // combine the same application id data in a same record let n_data = {}; let next_record = true; - console.log("data:"); - console.log(data); + console.log('data:', data); for (let i = 0; i < data.length; i++) { if (i > 0 && data[i].application_id != data[i-1].application_id) { // this record is different from the last @@ -62,6 +61,7 @@ function combineSameAppData(data) { n_data[data[i].application_id].application_units = [data[i].application_unit]; n_data[data[i].application_id].item_contents = [data[i].item_content]; n_data[data[i].application_id].subsidys = [data[i].subsidy]; + n_data[data[i].application_id].supplement_filename = [data[i].supplement_filename]; } else { n_data[data[i].application_id].application_units.push(data[i].application_unit); @@ -69,11 +69,13 @@ function combineSameAppData(data) { n_data[data[i].application_id].subsidys.push(data[i].subsidy); } } + console.log("SameAPPData here"); + console.log('n_data: ' , n_data); all_audit_data = n_data; return n_data; } -function auditCase(application_id) { +async function auditCase(application_id) { console.log(`set application_id = ${application_id}`); current_review_apllication_id = application_id; @@ -81,6 +83,9 @@ function auditCase(application_id) { const table_id = "application_detail"; document.getElementById(table_id).innerHTML = application_detail_init_table_content; let table_content = document.getElementById(table_id).innerHTML; + if (all_audit_data == null) { + console.log("ERROR HERE"); + } const data = all_audit_data[application_id]; console.log(all_audit_data); console.log(data); @@ -104,14 +109,24 @@ function auditCase(application_id) { document.getElementById(table_id).innerHTML = table_content; // add simple info - document.getElementById("application_info").innerHTML = + let inner_html = ` 申請編號:${data.application_id}
申請日期:${data.application_date}
申請人姓名:${data.student_name}
申請人學號:${data.student_id}
+ 未獲補助證明檔案: + `; + if (data.supplement_filename != '') { + inner_html += `${data.supplement_filename} ` + } else { + inner_html += "無"; + } + inner_html += + `
申請內容: `; + document.getElementById("application_info").innerHTML = inner_html; console.log(); } @@ -119,7 +134,8 @@ function auditCase(application_id) { async function putDataInTable(table_id) { // get data const result = await getItemInfo(); - const data = combineSameAppData(result.data); + console.log('intable'); + const data = await combineSameAppData(result.data); const suc = result.success; if (suc && data != null && table_id != null) { // insert data into table @@ -155,7 +171,8 @@ async function putDataInTable(table_id) { async function putDataInAuditedTable(table_id) { // get data const result = await getAuditedItemInfo(); - const data = combineSameAppData(result.data); + console.log('audit_table'); + const data = await combineSameAppData(result.data); const suc = result.success; if (suc && data != null && table_id != null) { // insert data into table @@ -335,6 +352,7 @@ async function sendReviewResult() { const result = await axios.post("/api/audit", data); if (result.data.suc) { alert("審核成功!"); + window.location.reload(); } else { alert("審核失敗!", result.data.msg); @@ -342,6 +360,11 @@ async function sendReviewResult() { // window.location.reload(); } -setAssistantName(); -putDataInTable("application_table"); -putDataInAuditedTable("audit_block"); +async function main() { + setAssistantName(); + await putDataInAuditedTable("audit_block"); + await putDataInTable("application_table"); + +} + +main() diff --git a/js/main.js b/js/main.js index 4f7aef4..7e6ac04 100644 --- a/js/main.js +++ b/js/main.js @@ -118,6 +118,8 @@ async function sendApplyData() { // send data let result = await axios.post('/api/main', data, {headers: {'Content-Type': 'multipart/form-data'}}); console.log(result); + window.location.reload(); + } function setUserInfo() {