Files
pedwfrontend/pages/api/file/uploadsinglefile.js
T

147 lines
5.9 KiB
JavaScript

import {
createBlob,
createRepBlob,
uploadSingleFile,
} from "../../../actions/azurestorage";
import nextConnect from "next-connect";
import middleware from "../middleware/middleware";
import { consoleLogger } from "../../../actions";
import { fileTypeFromBuffer } from "file-type";
import fs from "fs";
import path from "path";
const ApiProxy = nextConnect();
ApiProxy.use(middleware);
ApiProxy.post(async (req, res) => {
var checkHash = req.query.hash;
// console.log(JSON.stringify(req.body));
// console.log(JSON.stringify(req.body.appealData));
// console.log(req.files);
const containerID = req.body.containerID[0];
const casefolderID = req.body.casefolderID[0];
console.log("there are files:", Object.keys(req.files).length);
// Add other mimetypes here
const allowedMimeTypes = [
"application/pdf",
"application/msword",
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"image/tiff",
"image/jpeg",
"application/zip",
"image/png",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
];
var allowedFilesFormData = {};
var invalidFiles = []; // To store the names of invalid files
// for (const [fileName, fileDetails] of Object.entries(req.files)) {
// if (allowedMimeTypes.includes(fileDetails[0].headers["content-type"])) {
// allowedFilesFormData[fileName] = fileDetails.map((file) => ({
// fieldName: file.fieldName,
// originalFilename: file.originalFilename,
// path: file.path,
// size: file.size,
// headers: file.headers,
// contentType: file.headers["content-type"],
// }));
// }
// }
for (const [fileName, fileDetails] of Object.entries(req.files)) {
const file = fileDetails[0];
const filePath = file.path;
// Check the MIME type from file headers
const fileMimeType = file.headers["content-type"];
if (allowedMimeTypes.includes(fileMimeType)) {
// Check file signature (magic number) using file-type
const buffer = fs.readFileSync(filePath);
try {
const type = await fileTypeFromBuffer(buffer); // Correct usage of fileTypeFromBuffer
console.log("checking mime type ", type);
if (type && allowedMimeTypes.includes(type.mime)) {
// If the MIME type from the file signature matches the allowed list
allowedFilesFormData[fileName] = fileDetails.map(
(file) => ({
fieldName: file.fieldName,
originalFilename: file.originalFilename,
path: file.path,
size: file.size,
headers: file.headers,
contentType: fileMimeType,
})
);
} else {
console.log(
`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an invalid MIME type based on its content.\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`
);
invalidFiles.push(fileName); // Track invalid file
// return res
// .status(400)
// .json({ error: `Invalid file type for ${fileName}` });
}
} catch (error) {
console.log(
`Error reading file ${fileName} for MIME type validation`,
error
);
// return res
// .status(500)
// .json({ error: "Failed to validate file type" });
}
} else {
console.log(
`\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\n\nFile ${fileName} has an unsupported MIME type: ${fileMimeType}\n\n\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\`
);
invalidFiles.push(fileName); // Track invalid file
// return res.status(400).json({
// error: `Unsupported MIME type for ${fileName}`,
// });
}
}
//console.log("allowedFilesFormData: ", allowedFilesFormData);
// If no valid files are found
// if (Object.keys(allowedFilesFormData).length === 0) {
// return res.status(400).json({
// error: "No valid files found",
// invalidFiles: invalidFiles, // Return the list of invalid files
// });
// }
invalidFiles = invalidFiles.map((fileName) => {
return `${fileName} - Invalid file`;
});
try {
const data = await uploadSingleFile(
allowedFilesFormData,
containerID,
casefolderID
).then((data) => {
return res.status(200).json({ data, invalidFiles });
});
return res.status(200).json({ data, invalidFiles });
} catch (error) {
consoleLogger(error);
return res.status(500).json({ error: "Failed to upload files" });
}
});
export const config = {
api: {
bodyParser: false,
},
};
export default ApiProxy;