2012-11-26 2 views
2

생성 된 보고서 목록에서 다운로드 할 수있는 링크가 있습니다. 이 보고서의 내용은 데이터베이스에 저장됩니다. 나는 다운로드에게 보고서를 수행 할 때, 아래의 코드를 사용 : 대부분의 경우긴 파일 이름을 다운로드 할 때 수정하는 Chrome (C# FileContentResult 사용)

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

를, 파일 이름은 50자를 초과 내가 구글 크롬을 사용하여 보고서를 다운로드 할 때, 브라우저는 헤더에서 생성 된 파일 이름을 무시하고 다운로드 링크의 마지막 매개 변수를 사용하여 파일을 저장하려고 시도합니다. 예를 들어, 다운로드 링크가 http://appname.com/report/download/123이고 브라우저가 "123.pdf"이면 브라우저가 반환되지만 "이어야합니다. 관련 정보는 신뢰할 수 있어야합니다. 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 
}; 

이 관심을 가져 주셔서 감사합니다.

관련 문제