More update for Vehicle
This commit is contained in:
@@ -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
|
||||
};
|
||||
Reference in New Issue
Block a user