在我的函数中,我返回一个 FileStreamResult ,但是根据文件名,下载的文件会得到一个怪异的名称(在某些浏览器中返回函数名,在其他浏览器中返回函数名,但所有文件名混合)
public FileStreamResult _GetFile(long idFile)
{
//////////
/// ... get the object 'file'
//////////
FileStreamResult retorno = null;
if (file != null)
{
var stream = new MemoryStream(file.Bytes);
retorno = File(stream, "binary", file.Name);
}
return retorno;
}
当文件名带有重音符号并且达到一定大小时,会发生错误(例如,在chrome中,下载名称为“ _ GetFile” 的文件)
如果文件名是这样的
ááââ_abcdefghijlmnpqrstuvxzkwy_abcdefghijlmnopqrstuvxzkwy.abc
它会产生错误
但是这两个不是
ááââ_abcdefghijlmnpqrstuvxzkwy.abc
aa aa_abcdefghijlmnpqrstuvxzkwy_abcdefghijlmnopqrstuvxzkwy.abc
更新
我注意到我的响应标题的 Content-Disposition 在不起作用时看起来像这样
内容配置:附件; filename =“ =?utf-8?B?w6HDoSAgw6LDol9hYmNkZWZnaGlqbG1ucHFyc3R1dnh6a3d5X2FiY2Rl?=%0d%0a =?utf-8?B?ZmdoaWpsbW5vcHFyc3R1dnh6a3d5 =
显示两个?utf-8?
,但我仍然不明白为什么。
(工作正常且名称带有重音时,只会显示一个?utf-8?
)
任何帮助将不胜感激!
谢谢!
答案 0 :(得分:0)
FileStreamResult具有一个名为FileDownloadName的属性,因此您需要指定它。
public FileStreamResult _GetFile(long idFile)
{
//////////
/// ... get the object 'file'
//////////
if (file != null)
{
var stream = new MemoryStream(file.Bytes);
retorno = File(stream, "binary", file.Name);
}
var fileName = "Your name here";
return new FileStreamResult(stream, "binary") {FileDownloadName = fileName;}
}