node.js 文件下载文件名乱码问题
之前对http报文一知半解,今天整个文件下载做demo的时候文件名总是乱码。抓狂了2个点,终于好了QAQ 主要是 Content-Disposition这个报文头的编码。
看到了这个 http://www.2cto.com/kf/201208/147733.html 才知道,各种浏览器的不同的解析方式(你们这群大神们,就不能按标准来么TAT)。 经过我小电脑测试,IE9和chrome都是支持base64的,而火狐不支持url编码的,支持base64,但是有个让我抓狂的问题,node上也没找到一个适合的base64 encoder··而且那个网上提供的base64也不知道是如何编码的。。 贴上我的代码吧。大神们有时间试试呗><~~
var fs = require('fs');
var http = require('http');
var mime = require('mime');
var urlencode = require('urlencode');
var base64 = require('sixtyfour');
var path = "/opt/我是中文.txt"
http.createServer(function(req, res){
res.writeHead(200,{
// 'Content-Type':mime.lookup(path),
'Content-Type':'application/octet-stream;charset=utf8',
'Coneten-Length':fs.statSync(path).size,
//'Content-Disposition':'attachment;filename='+urlencode('你好!')+'.txt'
//ie chrome支持
'Content-Disposition': "attachment; filename=\"=?UTF8?B?c3RydXRzMi4w5Lit5paH5pWZ56iLLmNobQ==?=\""
//火狐正确,chrome正确, ie不正确
});
var opt = {
flags:'r'//,
//encoding:'utf-8',
//autoClose:true
};
var stream = fs.createReadStream(path, opt);
stream.pipe(res);
stream.on('end', function(){
res.end();
});
}).listen(10000, "0");
console.log('Server running...');
2 回复
老天,,base64 是nodejs内置支持的编码之一呀~
感谢你,最终找到了都支持的方法 ’Content-Disposition’: “attachment;filename*=UTF-8’’”+urlencode(‘你好!’)+’.txt’