nodejsはファイルのダウンロードを実現して、ファイル名は中国語を含みます.


NodeJsでダウンロードしたファイルが間違っています.http_out going
_http_outgoing.js:464
    throw err;
    ^
TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Content-Disposition"]
コードは
var express=require(‘express’);var router=express.Router()router.get('/download/fileName/:realName',function(req,res,next){var fileName=req.params.fileName]//サーバ上のファイル名var realName=req.params.realName;/ユーザーに展示するファイル名
    fs.readFile(path, function(isErr, data){
        if (isErr) {
            res.end("Read file failed!");
            return;
        }
        res.writeHead(200,{
            'Content-Type': 'application/octet-stream;', //              
            'Content-Disposition': 'attachment; filename='+realName, //                
        });
        res.end(data)
    })
});
上記のコードはファイル名に中国語が含まれていない場合は使えますが、ファイル名に中国語が含まれている場合は上記のエラーを報告します.多くの資料を調べましたが、基本的に問題が見つかったのはコードの問題です.javaコードは多くの人に勧められています.
fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
NodeJsでは方法がないですが、アイデアを得て、コードを入れます.
realName = encodeURI(realName,"GBK")
realName = realName.toString('iso8859-1')
テストは使用できます.完全コードは以下の通りです.
var express = require('express');
var router = express.Router();
    router.get('/download/:fileName/:realName', function (req, res, next) {
        var fileName = req.params.fileName;
        var realName = req.params.realName;
        var path = p.join(__dirname,"../uploadsDocs/" + fileName);
        console.log(path)
    
        fs.readFile(path, function(isErr, data){
            if (isErr) {
                res.end("Read file failed!");
                return;
            }
            //fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
            realName = encodeURI(realName,"GBK")
            realName = realName.toString('iso8859-1')
            res.writeHead(200,{
                'Content-Type': 'application/octet-stream;', //              
                'Content-Disposition': 'attachment; filename='+realName, //                
            });
            res.end(data)
        })
    });