mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 00:40:14 +01:00
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const crypto = require('crypto');
|
|
const multer = require('multer');
|
|
const { fileConfig: defaultFileConfig, mergeFileConfig } = require('librechat-data-provider');
|
|
const getCustomConfig = require('~/server/services/Config/getCustomConfig');
|
|
|
|
const storage = multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
const outputPath = path.join(req.app.locals.paths.uploads, 'temp', req.user.id);
|
|
if (!fs.existsSync(outputPath)) {
|
|
fs.mkdirSync(outputPath, { recursive: true });
|
|
}
|
|
cb(null, outputPath);
|
|
},
|
|
filename: function (req, file, cb) {
|
|
req.file_id = crypto.randomUUID();
|
|
file.originalname = decodeURIComponent(file.originalname);
|
|
cb(null, `${file.originalname}`);
|
|
},
|
|
});
|
|
|
|
const fileFilter = (req, file, cb) => {
|
|
if (!file) {
|
|
return cb(new Error('No file provided'), false);
|
|
}
|
|
|
|
if (!defaultFileConfig.checkType(file.mimetype)) {
|
|
return cb(new Error('Unsupported file type: ' + file.mimetype), false);
|
|
}
|
|
|
|
cb(null, true);
|
|
};
|
|
|
|
const createMulterInstance = async () => {
|
|
const customConfig = await getCustomConfig();
|
|
const fileConfig = mergeFileConfig(customConfig?.fileConfig);
|
|
return multer({
|
|
storage,
|
|
fileFilter,
|
|
limits: { fileSize: fileConfig.serverFileSizeLimit },
|
|
});
|
|
};
|
|
|
|
module.exports = createMulterInstance;
|