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));
})
})
})