2

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

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

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

有没有人经历过这种情况?

4

1 回答 1

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

感谢您的关注。

于 2012-11-26T16:55:26.387 回答