multer искажает русский язык
multer искажает русский язык на express typescript

Вот так русский язык отображается в базе данных, но проблема заключена в multer. Нужно сделать так, чтобы name (originalname) нормально отображал русский язык. Далее прилагаю код самого multer.
import multer from 'multer'
import * as uuid from 'uuid'
const StorageFiles = multer.diskStorage({
destination:'uploads/files',
filename: (req, file, cb)=>{
cb(null, `${uuid.v4()}.${file.originalname.split('.').at(-1)}`)
},
})
const uploadFiles = multer({
storage: StorageFiles
}).array('files', 10)
export {uploadFiles}
Далее прилагаю код, добавления файлов в базу данных
async create(files:any){
const filesArray = await Promise.all(files.map(async(file:any)=>{
const fileData = await prisma.file.create({
data:{
id:file.filename,
name: file.originalname
}
})
return fileData.id
}))
return filesArray
}
И если нужно прилагаю код из контроллера
async createFiles(req:any, res:any, next:any){
try {
uploadFiles(req, res, async(err:any)=>{
if(err){
next(err)
}
else if(req.files)
{
const userData = await taskService.create(req.files)
return res.send(userData)
}
else {
next(err)
}
})
} catch (e) {
next(e)
}
}
Помогите пожалуйста ^_^
Ответы (1 шт):
Автор решения: ColdDarkness
→ Ссылка
Символы, которые не являются utf-8 символами, нужно закодировать. В моем случае, я записывал название файла русскими буквами, поэтому оно искажалось. Чтобы закодировать название, можно использовать метод класса Buffer:
Buffer.from(fileName, 'latin1').toString();
В случае с multer используем diskStorage:
diskStorage({
filename(
req: e.Request,
file: Express.Multer.File,
callback: (error: Error | null, filename: string) => void,
) {
return Buffer.from(file.filename, 'latin1').toString();
},
})