首页 > 编程语言 >nodejs express multer 中文名乱码【转】

nodejs express multer 中文名乱码【转】

时间:2022-12-30 09:35:10浏览次数:60  
标签:express fileName 乱码 let multer file originalname

文件上传服务器端接收的文件列表中文件名不支持中文,都是乱码,查询发现nodejs对中文支持的不好。

找了半天,发现这个解决方法确实有效!!!!!核心代码

// 解决中文名乱码的问题
    file.originalname = Buffer.from(file.originalname, "latin1").toString(
      "utf8"
    );

 

上传时前端正常,但是后端接收文件时乱码
在这里插入图片描述

const uploads = multer({
  // 文件上传的位置
  dest: path.join(__dirname, "../../public/uploads"),
  fileFilter(req, file, callback) {
    // 解决中文名乱码的问题
    file.originalname = Buffer.from(file.originalname, "latin1").toString(
      "utf8"
    );
    callback(null, true);
  },
});


 app.post("/upload", uploads.array("files"), async function (req, res) {
     // 你的代码
 })

上我的代码

// 文件上传
const express = require('express');
const router = express.Router();
const multer = require('multer');
const path = require('path')
var fs = require('fs');

let createFolder = function(folder){
    try{
        fs.accessSync(folder); 
    }catch(e){
        fs.mkdirSync(folder);
    }  
};

let upload = multer({
    storage: multer.diskStorage({
        //设置文件存储位置
        destination: function(req, file, cb) {
            let date = new Date();
            let year = date.getFullYear();
            let month = (date.getMonth() + 1).toString().padStart(2, '0');
            let day = date.getDate();
            let dir = "./uploads/" + year + month + day;

            //判断目录是否存在,没有则创建
            if (!fs.existsSync(dir)) {
                fs.mkdirSync(dir, {
                    recursive: true
                });
            }

            //dir就是上传文件存放的目录
            cb(null, dir);
        },
        //设置文件名称
        filename: function(req, file, cb) {            
            // const fileFormat = (file.originalname).split('.') // 取后缀
            // let fileName = file.fieldname + '-' + Date.now() + ext;
            // 解决中文名乱码的问题
            file.originalname = Buffer.from(file.originalname, "latin1").toString(
                "utf8"
            );
            let fileName = file.originalname
            // 判断文件是否存在
            fs.access(fileName, error => {
                if (!error) {
                    // The check succeeded
                    //fileName就是上传文件的文件名
                    cb(null, fileName);
                } else {
                    // The check failed
                    let ext = path.extname(file.originalname);
                    let basename = path.basename(file.originalname)
                    let str = basename.split("."); // 以‘.’分割;
                    fileName = str[0] + '-' + Date.now() + ext;
                    //fileName就是上传文件的文件名
                    cb(null, fileName);
                }
            });        
        }
    })
});

//多个文件上传
router.post('/upload', upload.array('multerFile'), (req, res) => {
    console.log(req.files);
    let fileList = [];
    req.files.map((elem) => {
        fileList.push({
            originalname: elem.originalname
        })
    });
    res.json({
        code: 20000,
        type: 'multer',
        fileList: fileList
    });
});

 

标签:express,fileName,乱码,let,multer,file,originalname
From: https://www.cnblogs.com/mazhenyu/p/17014061.html

相关文章

  • HttpServletResponse ServletResponse 返回响应 设置响应头设置响应正文体 重定向
    ​​​​HttpServletResponse 和ServletResponse 都是接口具体的类型对象是由Servlet容器传递过来 ServletResponse对象的功能分为以下四种:       设置响应......
  • 麒麟系统Windows 终端拷贝到国产系统上文件内容乱码
    该问题主要是由于Windows上编辑的文档使用的字体在银河麒麟桌面操作系统上没有找到的原因,Windows上宋体、黑体、楷体、仿宋体、微软雅黑为Windows上独有字体,因字体涉及......
  • 解决二进制文件下载乱码问题
    好久没写博客了,突然想记录点什么。前段时间遇到一个问题,记录一下,以后遇到可以找到解决方案。事情的原由是这样的,后端返回一个二进制的csv文件让前端进行下载,前端采用axio......
  • C#的λ表达式树(LambdaExpression)保姆级超详细简单入门教程
    有看过我之前发表过的C#相关文章分享和阅读过我代码的朋友们可能会在我的代码里面经常看到各种各样的λ表达式动态拼接,C#的λ表达式树是一个好东西,也是别的语言学不来......
  • 命令行乱码处理
    chcp 936936         中国-简体中文(GB2312)Windows下在JAVA程序强制要UTF-8下,反而在命令行powershell会出现乱码,因为powershell默认是GB2312,要使得不产生......
  • express的使用:web开发(四)
    1.开发模式1.服务端渲染2.前后端分离2.身份认证1.服务端渲染推荐使用session认证机制2.前端后端分离建议使用JWT认证机制3.http协议的无状态性4.co......
  • 一篇文章教你如何用界面组件DevExpress WPF为应用配置文件选择!
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • 解决BurpSuite2021.12乱码问题
    一、抓包分析,响应包里有乱码二、选择UserOptions选项卡,选择Display,将字体调为宋体或楷体,字体大小最好为8的倍数三、重新查看响应包关注公众号回复Burp12,获取该版本下载地址......
  • express的使用:数据库相关(三)
    1.定义:用来组织,存储和管理数据的仓库2.分类a.MySQL(最广泛,流行度最高,community+enterprise),关系数据库,SQL数据库b.Oracle(收费),关系数据库,SQL数据库c.SQLS......
  • JS中 atob 方法解码中文字符乱码问题
    //中文base64编码functionutf8_to_b64(str){returnwindow.btoa(unescape(encodeURIComponent(str)));}//中文base64解码functionb64_to_utf8(str){......