@HitGirl

Почему у загружаемых файлов неверная кодировка в имени?

Здравствуйте!
Пытаюсь выполнить загрузку файлов с помощью multer.
Однако, если имя содержит unicode-символы, то оно читается некорректно.
В Postman всё работает, проблема только если отправлять через браузер.
С содержимым файлов проблем нет, только с названием.
Подскажите, пожалуйста, в чём может быть проблема?
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form
      action="<%= locals.id?'/form1':'/form' %>"
      method="post"
      style="
        display: grid;
        gap: 0.5rem;
        grid-template-columns: auto 1fr;
        max-width: 500px;
        margin: 0 auto;
      "
      enctype="multipart/form-data"
      accept-charset='utf-8'
    >
    <input type="file" name="avatar" />
    <button style="grid-column: span 2;" type="submit">Отправить</button>
</form>
</body>
</html>


import express from "express";
import dotenv from "dotenv";
//читаем env
dotenv.config()
import multer from "multer";

const app = express();
app.use(express.urlencoded({extended:true}))
app.use(express.json());
app.set("view engine","ejs")

//подключаем загрузчик файлов
const upload = multer({ dest: 'uploads/' })

app.get("/:id?", async (req,res,next)=>{
    res.render("index",{id:req.params.id});
})

app.post("/form", upload.fields([{ name: 'avatar', maxCount: 1 }]), async (req: any,res:any,next:any)=>{
    res.set({ 'content-type': 'application/json; charset=utf-8' });
    res.send(req.files['avatar']? req.files['avatar'][0].originalname.toString('latin1') : 'Ошибка');
})

app.listen(process.env.PORT, async ()=>{
    console.log("Server start at "+process.env.PORT)
})


{
  "name": "code",
  "version": "1.0.0",
  "description": "",
  "main": "server.ts",
  "scripts": {
    "dev": "nodemon server.ts"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.1",
    "ejs": "^3.1.8",
    "express": "^4.18.1",
    "multer": "^1.4.5-lts.1",
    "nodemon": "^2.0.18"
  },
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/multer": "^1.4.7",
    "ts-node": "^10.8.1",
    "typescript": "^4.7.4"
  }
}
  • Вопрос задан
  • 498 просмотров
Пригласить эксперта
Ответы на вопрос 1
@qwazimord
Интроверт
Переименуйте ваши файлы так, чтобы в них не было unicode-символов!
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы