当文件名很长并且包含非ASCII字符时,我遇到了一个有趣的问题。以下是发生的事情:
对于这个例子,我选择了文件名 VeryVeryT = 250°CSuperVeryFreakingVeryWowSoVeryCrazyLongFilenameWithOnlyASingleCrazyWeirdNonAsciiCharacterWhatCouldGoWrong.txt ,它只有一个非ASCII字符。
如果我通过ASP.NET应用程序下载此文件,则响应中的Content-Disposition标头为:
内容 - 处置:附件;文件名= “=?UTF-8 2 B 4 VmVyeVZlcnlUPTI1MMKwQ1N1cGVyVmVyeUZyZWFraW5nVmVyeVdvd1Nv?=%0D%0A =?UTF-8 2 B 4 VmVyeUNyYXp5X1NpbmdsZUNyYXp5V2VpcmROb25Bc2NpaUNoYXJhY3Rl?=%0D%0A =?UTF-8 2 B 4 cldoYXRDb3VsZEdvV3Jvbmcuemlw?=”
< / LI>如果我在GMail中给自己发送同一个文件并下载,那么这个标题中的标题如下:
内容处置:附件;文件名=“=?UTF-8 2 B 4 VmVyeVZlcnlUPSAyNTDCsENTdXBlclZlcnlGcmVha2k =?= =?UTF-8 2 B 4 bmdWZXJ5V293U29WZXJ5Q3JhenlMb25nRmlsZW5hbQ ==?= =?UTF-8 2 B 4 ZVdpdGhPbmx5QVNpbmdsZUNyYXp5V2VpcmROb25Bcw ==?= =?UTF-8 2 B 4 Y2lpQ2hhcmFjdGVyV2hhdENvdWxkR29Xcm9uZy50eHQ =?=“
在第一种情况下,Chrome无法理解标题并下载一个名为“ Download ”的无扩展名文件。在第二种情况下,它会使用正确的名称下载文件。
另一方面,Firefox更好地处理了第一种情况,但似乎仍然存在.NET构建的问题。它下载的文件名称为 VeryVeryT = 250°CSuperVeryFreakingVeryWowSo%0d%0a VeryCrazy_SingleCrazyWeirdNonAsciiCharacte%0d%0a rWhatCouldGoWrong.txt 。我的应用程序正在使用System.Net.Mime.ContentDisposition
类。这是我写的代码:
internal static FileStreamResult GetFileStreamResult(Stream fileStream, string fileDownloadName)
{
return new FileStreamResult(
fileStream: fileStream,
contentType: MIConstants.DefaultEmbeddedFileContentType)
{
FileDownloadName = fileDownloadName
};
}
这真的是.NET的错误还是我错过了什么?