More update for Vehicle

This commit is contained in:
Yang Li
2025-06-08 18:34:14 -04:00
parent e70fb22ac3
commit f18f213f6b
34 changed files with 1504 additions and 700 deletions

View File

@@ -1,10 +1,19 @@
const upload = require("../middlewares/upload");
// const uploadPhysical = require("../middlewares/upload_physical");
const dbConfig = require("../config/db.config");
const MongoClient = require("mongodb").MongoClient;
const GridFSBucket = require("mongodb").GridFSBucket;
const util = require("util");
var fs = require('fs');
var multer = require('multer');
const path = require("path");
const url = dbConfig.url;
const baseUrl = dbConfig.fileUrl;
const mongoClient = new MongoClient(url);
const readdir = util.promisify(fs.readdir);
const stat = util.promisify(fs.stat);
const uploadFiles = async (req, res) => {
try {
await upload(req, res);
@@ -63,8 +72,91 @@ const deleteFile = async (req, res) => {
}
};
const uploadPhysicalFile = async (req, res) => {
try {
// Destination and file name would be adjusted to be the same with original file system
const {objectId, name, fileType, model} = req.query;
const uploadedFile = req.file;
if (!uploadedFile) {
return res.status(400).send({
message: 'No file uploaded.'
})
}
return res.status(200).send({
message: `File ${fileType} Uploaded Successfully for ${model} ${objectId}-${name}`
})
} catch (error) {
return res.status(500).send({
message: error.message,
});
}
}
const getFilesByType = async (req, res) => {
try {
const {objectId, fileType, name, model} = req.params;
if (!objectId || !name || !fileType || !model) {
return res.status(400).send({message: 'Required fields missed'});
}
const BASE_UPLOAD_DIR = `/www/wwwroot/upload/`;
const filesDir = `${BASE_UPLOAD_DIR}${model}/${objectId}/${fileType}/`;
if (!fs.existsSync(filesDir)) {
return res.status(200).send({
data: {
objectId,
model,
fileType,
name,
files: [],
count: 0
}
})
}
const fileEntries = await readdir(filesDir, { withFileTypes: true});
const filePromises = fileEntries.filter(entry => entry.isFile()).map(async (entry) => {
const filePath = path.join(filesDir, entry.name);
const stats = await stat(filePath);
const fileUrl = `/files/${model}/${objectId}/${fileType}/${entry.name}`;
return {
name: entry.name,
url: fileUrl,
size: stats.size,
extension: path.extname(entry.name),
createdAt: stats.birthtime,
modifiedAt: stats.mtime
}
});
const files = await Promise.all(filePromises);
return res.status(200).json({
data: {
objectId,
fileType,
name,
files,
count: files.length
}
})
} catch(err) {
return res.status(500).send({
message: err.message
})
}
}
module.exports = {
uploadFiles,
getFile,
deleteFile
deleteFile,
uploadPhysicalFile,
getFilesByType
};