我遇到以下问题:当客户端输入某个URL时,它会通过sendFile()从Express接收.mp3文件。该文件的名称在响应头中定义如下:
var fileName = (JSON.stringify(data.videoTitle).replace(/["']/g, "") + fileType);
headers: {
'x-timestamp': Date.now(),
'x-sent': true,
'Content-type': 'application/octet-stream',
'Content-Disposition': 'attachment; filename="' + fileName + '"'
}
问题是fileName是从另一个网站获取的,我无法控制文件的标题。到目前为止它没有问题,但只是在我身上发现一个文件包含字符ú导致以下错误:
throw new TypeError('The header content contains invalid characters');
这可能会经常发生,因为标题可能不喜欢很多字符。在设置标题之前,我是否有可能只保留有效字符?我认为白名单方法比黑名单方法更好,因为无效字符几乎无限可能。
非常感谢您提前
答案 0 :(得分:3)
这是一个扩展的答案,基本上告诉您只允许使用ASCII或ISO-8859-1的子集。
What character encoding should I use for a HTTP header?
以下是您的解决方案:将文件名音译为ASCII字符,以便在标头值中使用安全: