node下载文件设置中文文件名

此处只介绍node下载如何设置下载文件的中文文件名
const fileName = fileName	// 文件名
const userAgent = (req.headers['user-agent'] || '').toLowerCase();
const suffix = fileName.split('.').pop()	//获取后缀名
res.setHeader('Content-Type', 'application/octet-stream;charset=UTF8');	// 设置头部让浏览器识别这是下载的文件
if (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('chrome') >= 0) {		// chrome很简单这样写就行
   res.setHeader("Content-Disposition", `attachment; filename=${encodeURIComponent(fileName)}.${suffix}`);
} else {	// 问题是safari和其他一些奇葩浏览器
   res.setHeader('Content-Disposition', `attachment; filename*=utf-8''${encodeURIComponent(fileName)}.${suffix}`);
}

注意:safari需要设置头部的是 filename* 这个*不能少!以及 utf-8后面加的 ''也不能少!不然设置的中文还是会乱码

设置完成safari以及一些奇葩浏览器设置的中文filename就正常了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 出现文件名乱码的原因是可能因为jsftp默认使用ASCII编码,而文件名使用的是UTF-8编码。解决方法可以在jsftp的配置指定编码为UTF-8,例如: ```javascript var Ftp = require('jsftp'); var ftp = new Ftp({ host: 'ftp.example.com', user: 'username', password: 'password', encoding: 'utf8' // 指定编码为UTF-8 }); ``` 这样在拉取文件列表时,文件名就能正确显示了。 ### 回答2: 在JavaScript使用FTP来拉取文件列表时,如果文件名包含文字符并显示乱码,可以采取以下解决方法: 1. 确保使用UTF-8编码格式:使用FTP客户端连接服务器时,确认服务器端设置为UTF-8编码格式,以便正确解析文字符。 2. 解码文字符:在JavaScript,通过对文字符进行相应解码操作来处理乱码问题。可以使用decodeURIComponent()函数来对乱码的文件名进行解码。 举例来说,如果从FTP服务器获取到的文件名为"%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt",则可以使用以下代码解码: ```javascript var encodedFileName = "%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6.txt"; var decodedFileName = decodeURIComponent(encodedFileName); console.log(decodedFileName); // 输出:"文件.txt" ``` 3. 使用node.js的FTP库:如果在Node.js环境下进行FTP文件列表拉取,可以使用一些已有的FTP库,如"ftp"或"jsftp",这些库具有更好的文件名支持,可以自动解决乱码问题。 以上是解决JavaScript使用FTP拉取文件列表文件名乱码的方法。通过正确设置编码格式、解码文字符或使用特定的FTP库,可以正常获取文件名并避免乱码问题。 ### 回答3: 当js使用FTP拉取文件列表时,如果文件名出现乱码,可以采取以下解决方法: 1. 确保FTP服务器和客户端编码一致:在js使用的编码方式必须与FTP服务器的编码方式保持一致,例如UTF-8或GBK等。可以通过在js设置编码方式来保持一致。如果FTP服务器编码方式未知,可以尝试使用不同的编码方式进行测试,找到与服务器编码一致的方式。 2. 采用Base64编码方式传输文件名:由于FTP协议对文件名的支持不一致,采用Base64编码方式可以解决文件名乱码问题。在js文件名进行Base64编码后,再发送给FTP服务器,服务器接收后进行解码。这样可以确保文件名的正确传输。 3. 修改FTP服务器配置:某些FTP服务器默认不支持文件名的显示,需要进行相应的配置修改。例如在vsftpd服务器,可以通过配置文件添加"utf8_filesystem=YES"来支持文件名的显示。修改服务器配置后,js拉取文件列表时可以正常显示文件名。 4. 处理乱码后进行转换:如果在js拉取文件列表时仍然出现文件名乱码,可以尝试对乱码进行处理和转换。使用js的转换函数将乱码转换为正确的文件名。根据具体的乱码形式和编码方式来选择合适的转换方法,例如使用iconv-lite库进行编码转换。 总之,解决js拉取FTP文件列表文件名乱码问题,需要确保编码方式一致,使用Base64编码方式传输文件名,修改FTP服务器配置或者处理乱码后进行转换等方法。根据具体情况采取不同的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值