5

ファイル名にアクセントが含まれている場合、Opera、FF、Chrome、および IE9 で期待どおりに機能します。

しかし、IE8 のファイル タイプは「不明なファイル タイプ」であり、ファイル名 (実際には URL の最後の部分) として「ファイル」が表示されます。

誰かが回避策を知っていますか? ファイル名の「特殊」文字を置き換える以外に?

テスト コード: (ファイル | 新しいプロジェクト | コントローラーの追加)

public class FileController : Controller
{
    public ActionResult Index(bool? Accents)
    {
        byte[] content = new byte[] { 1, 2, 3, 4 };

        return File(content, "application/octet-stream", true.Equals(Accents) ? "dsaé.txt" : "dsae.txt");
    }
}

次のようにテストします: http://localhost/file、および http://localhost/file?accents=true

編集=>誰かが興味を持っているなら、私にとっての「解決策」:

public class FileContentResultStupidIE : FileContentResult //yeah, maybe i am not totally "politically correct", but still...
{
    public FileContentResultStupidIE(byte[] fileContents, string contentType) : base(fileContents, contentType) { }

    public override void ExecuteResult(ControllerContext context)
    {
        var b = context.HttpContext.Request.Browser;
        if (b != null && b.Browser.Equals("ie", StringComparison.OrdinalIgnoreCase) && b.MajorVersion <= 8)
        {
            context.HttpContext.Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + HttpUtility.UrlPathEncode(base.FileDownloadName) + "\"");
            WriteFile(context.HttpContext.Response);
        }
        else
        {
            base.ExecuteResult(context);
        }
    }
}
4

2 に答える 2

2

コントローラアクション内に次の行を追加してみてください。

Response.HeaderEncoding = Encoding.GetEncoding("iso-8859-1");

これらの問題について説明している次のブログ投稿をご覧ください。残念ながら、すべてのブラウザで機能する一般的なソリューションはありません。

于 2011-08-04T15:01:29.830 に答える
0

これは、ユーザーがある時点でシステムにアップロードしているファイルですか?その場合は、ファイル名でのアクセントの使用を制限してください。そうでない場合は、ファイル名にアクセントを使用しないでください:)。

于 2011-08-04T14:52:14.720 に答える