2012-11-26 59 views
2

在生成的報告列表中,有一個鏈接可供下載。這些報告的內容存儲在數據庫中。當我執行下載的報告,使用下面的代碼:Chrome在下載時修改長文件名(使用c#FileContentResult)

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

在許多情況下,文件名超過50個字符,當我做下載使用谷歌瀏覽器的報告時,瀏覽器會忽略在標題中產生的文件名和嘗試使用下載鏈接的最後一個參數來保存文件,這種情況下報告的ID,例如:下載鏈接是http://appname.com/report/download/123,並返回瀏覽器是「123.pdf」,但應該是「Relatóriode probabilidade e risco de processos.pdf「。但是當我使用Mozilla Firefox或IE時,問題不會發生。

有沒有人遇到過這種情況?

回答

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

感謝您的關注。