nodejsはファイルのダウンロードを実現して、ファイル名は中国語を含みます.
NodeJsでダウンロードしたファイルが間違っています.http_out going
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;/ユーザーに展示するファイル名
_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)
})
});