Quiet
  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我

bajiu

  • 主页
  • 归档
  • 分类
  • 标签
  • 链接
  • 关于我
Quiet主题
  • 疑难杂症
  • NodeJs
  • JavaScript

node上传文件乱码

bajiu
前端

2024-01-31 13:57:00

nodejs、express、multer 中文名乱码问题

node后端服务会上传文件,上传成功后会把文件名返回前端显示出来,这时候就会显示乱码了

node上传文件代码

app.post('/file_upload', function(req, res) {
    // req.files[0].originalname是获取到的文件名,这时候已经是乱码了
  var des_file = __dirname + "/" + req.files[0].originalname;

  fs.readFile(req.files[0].path, function(err, data){
        // 文件写入
    fs.writeFile(des_file, data, function(err) {
      var response = {}
      if(err) {
        console.error(err);
      } else {
                // 上传成功,返回前端消息
        response = {
          message: 'File uploaded successfully',
          filename: req.files[0].originalname
        }
      }

      res.end(JSON.stringify(response));
    })
  })
})

解决

文件上传服务器接收文件列表中文件名名不支持中文,nodejs对中文的支持不友好,所以我们要进行一次编码转换

Buffer.from(originalname, "latin1").toString(
    "utf8"
);
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});

修改之后的完整代码

app.post('/file_upload', function(req, res) {
    // 解析文件名
  var originalname = Buffer.from(req.files[0].originalname, "latin1").toString("utf8");
  var des_file = __dirname + "/" + originalname;
  
  fs.readFile(req.files[0].path, function(err, data){
    fs.writeFile(des_file, data, function(err) {
      var response = {}
      if(err) {
        console.error(err);
      } else {
        response = {
          message: 'File uploaded successfully',
          filename: originalname
        }
      }
            // 添加响应头
      res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
      res.end(JSON.stringify(response));
    })
  })
})
上一篇

在 Ubuntu 22.04 LTS 上安装 CUDA

下一篇

使用IRenderableSeriesViewModel展示图表数据

©2024 By bajiu.