FileStreamResult问题返回具有某些名称的文件

时间:2019-06-24 20:46:10

标签: c# asp.net-mvc

在我的函数中,我返回一个 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?

任何帮助将不胜感激!

谢谢!

1 个答案:

答案 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;}
}