feat: download uploaded files

This commit is contained in:
Ting-Jun Wang 2024-09-01 19:45:43 +08:00
parent 8f8897338a
commit 4d1d4c1e79
Signed by: snsd0805
GPG Key ID: D175E969960C4B16
6 changed files with 78 additions and 13 deletions

View File

@ -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,

34
api/download.js Normal file
View File

@ -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;

View File

@ -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
// 這邊你們要再改

View File

@ -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'));

View File

@ -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} <br/>
申請日期${data.application_date} <br/>
申請人姓名${data.student_name} <br/>
申請人學號${data.student_id} <br/>
未獲補助證明檔案:
`;
if (data.supplement_filename != '') {
inner_html += `${data.supplement_filename} <button><a href='/api/download?filename=${data.supplement_filename}'>下載</a></button>`
} else {
inner_html += "無";
}
inner_html +=
`<br>
申請內容
`;
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()

View File

@ -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() {