Chrome下载时修改长文件名(使用c#FileContentResult)

时间:2012-11-26 14:30:30

标签: c# google-chrome filecontentresult

在生成的报告列表中,有一个下载它们的链接。这些报告的内容存储在数据库中。当我执行下载报告时,请使用以下代码:

return new FileContentResult (report.FileContents, mimeType)
{
    FileDownloadName = report.Title + report.Extension
};

在许多情况下,文件名超过50个字符,当我使用谷歌浏览器下载报告时,浏览器会忽略标题中生成的文件名并尝试使用下载链接的最后一个参数保存文件,这种情况下报告ID,例如:下载链接为http://appname.com/report/download/123,返回浏览器为“ 123.pdf ”,但应为“Relatóriodeprobabilidade e risco de processos.pdf ”。但是当我使用Mozilla Firefox或IE时,问题不会发生。

有没有人遇到过这种情况?

1 个答案:

答案 0 :(得分:1)

问题与字符数无关,而是指特殊字符。我创建了一个删除特殊字符并尝试文件名的函数。

功能:

/// <summary>
/// Remove characters from string
/// </summary>
public static string RemoveSpecialCharacters(string text, bool allowSpace)
{
    var normalizedString = text;

    // Prepare the symbol table.
    var symbolTable = new Dictionary<char, char[]>();

    symbolTable.Add('a', new char[] { 'à', 'á', 'ä', 'â', 'ã' });
    symbolTable.Add('c', new char[] { 'ç' });
    symbolTable.Add('e', new char[] { 'è', 'é', 'ë', 'ê' });
    symbolTable.Add('i', new char[] { 'ì', 'í', 'ï', 'î' });
    symbolTable.Add('o', new char[] { 'ò', 'ó', 'ö', 'ô', 'õ' });
    symbolTable.Add('u', new char[] { 'ù', 'ú', 'ü', 'û' });

    // Replaces the symbols.
    foreach (var key in symbolTable.Keys)
    {
        foreach (var symbol in symbolTable[key])
        {
            normalizedString = normalizedString.Replace(symbol, key);
        }
    }

    // Remove the other special characters.
    if (allowSpace)
        normalizedString = System.Text.RegularExpressions.Regex.Replace(normalizedString, @"[^0-9a-zA-Z.-_\s]+?", string.Empty);
    else
        normalizedString = System.Text.RegularExpressions.Regex.Replace(normalizedString, @"[^0-9a-zA-Z.-_]+?", string.Empty);

    return normalizedString;
}

更正后的代码:

...

string reportName = StringUtils.RemoveSpecialCharacters(report.Title, true);

return new FileContentResult(report.FileContents, mimeType)
{
    FileDownloadName = reportName + report.Extension
};

感谢您的关注。