Nodejs express中上传了文件中的中文是乱码肿么办

Nodejs express中上传了文件中的中文是乱码肿么办

//app.js里面 … app.use(express.bodyParser({keepExtensions: true,uploadDir:’./localtmp’})); … console.log(req.files.file);//在console里面看到打印出来的file的defaultEncoding属性是utf-8

//上传完毕后查看文件,原来的是中文打开的就是乱码了。。求教~0.0

5 回复

Nodejs express中上传了文件中的中文是乱码怎么办?

在使用Express处理文件上传时,如果遇到上传的文件中的中文显示为乱码,这通常是由于文件编码问题或文件读取方式不正确所导致的。以下是一个详细的解决方案,包括如何配置Express以正确处理文件上传,并确保文件内容不会出现乱码。

1. 安装必要的依赖

首先,确保你已经安装了expressmulter这两个库。multer是一个用于处理multipart/form-data的中间件,主要用于文件上传。

npm install express multer

2. 配置Express应用

接下来,我们需要配置Express应用来使用Multer进行文件上传。

const express = require('express');
const multer = require('multer');

const app = express();

// 设置Multer存储配置
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './localtmp'); // 指定文件保存路径
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname); // 使用原始文件名
  }
});

const upload = multer({ storage });

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file);
  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

3. 文件读取与处理

当你从客户端上传文件后,你需要确保在读取文件内容时指定正确的编码格式。通常情况下,默认的编码格式应该是UTF-8。你可以使用fs模块来读取文件内容,并确保指定正确的编码。

const fs = require('fs');

app.get('/view-file', (req, res) => {
  const filePath = './localtmp/' + req.query.filename;
  
  fs.readFile(filePath, 'utf-8', (err, data) => {
    if (err) {
      return res.status(500).send('Error reading file.');
    }
    res.send(data);
  });
});

通过以上步骤,你应该能够解决Node.js Express中文件上传时中文乱码的问题。关键在于正确设置Multer的存储配置以及在读取文件内容时指定正确的编码格式。


win的文档格式默认是ansi格式的编码,而express使用的是utf8编码,所以会出现中文乱码。如果你也使用notepad++编辑器的话,在你需要输入中文的时候请“格式”–“以utf8格式编码”。

这种要用 iconv 进行一下转马

用的是utf-8无BOM格式编码哎~要上传不同的文件类型呢doc pdf等等,使用express upload应该怎么处理呢。。。

在 Node.js 中使用 Express 上传文件时遇到中文乱码问题,通常是因为文件名编码问题或处理过程中未正确设置字符编码。你可以尝试以下方法来解决这个问题。

解决方案

  1. 确保客户端请求头中包含正确的 Content-Type: 确保上传文件时,客户端(如 HTML 表单)请求头中包含正确的 Content-Type。例如,对于文件上传表单,应设置为 multipart/form-data

  2. 使用 multer 中间件处理文件上传: multer 是一个专门用于处理 multipart/form-data 的中间件,更适合处理文件上传任务。你可以替换掉 express.bodyParser() 方法,使用 multer 来更好地管理文件上传过程。

示例代码

首先,你需要安装 multer 包:

npm install multer --save

然后,在你的 app.js 文件中进行如下修改:

const express = require('express');
const multer = require('multer');

const app = express();

// 配置 multer 存储策略
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './localtmp'); // 指定存储目录
  },
  filename: function (req, file, cb) {
    // 将文件名转换为 UTF-8 编码
    cb(null, decodeURIComponent(file.originalname));
  }
});

const upload = multer({ storage });

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file);
  res.send('File uploaded successfully!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

在这个例子中,我们使用 multerdiskStorage 方法来自定义文件存储逻辑,并在 filename 回调函数中使用 decodeURIComponent 对文件名进行解码处理,以避免乱码问题。

通过这些调整,你应该可以解决上传文件中的中文乱码问题。

回到顶部