Имя файла загрузки в IE просто "untitled.bmp" - как это исправить? - PullRequest
0 голосов
/ 02 ноября 2011

Я использую ASP.Net MVC3, и подаю файлы, используя это:

public class ByteResult : ActionResult
{
    public String ContentType { get; set; }
    public byte[] Bytes { get; set; }


    public ByteResult(byte[] sourceStream, String contentType)
    {
        Bytes = sourceStream;
        ContentType = contentType;

    }

    public override void ExecuteResult(ControllerContext context)
    {
        var response = context.HttpContext.Response;
        response.Clear();
        response.Cache.SetCacheability(HttpCacheability.NoCache);
        response.ContentType = ContentType;

        var stream = new MemoryStream(Bytes);
        stream.WriteTo(response.OutputStream);
        stream.Dispose();       

    }
}

С фотографиями, встроенными в страницу с использованием этого метода, когда пользователь выбирает «сохранить изображение / изображение как ...» из контекстного меню, диалоговое окно «Сохранить как» представляет имя файла из атрибута img src для всех браузеров кроме IE (конечно), который представляет "untitled.bmp". Тьфу.

Как исправить для IE ??

Ответы [ 2 ]

5 голосов
/ 02 ноября 2011

Нет необходимости создавать собственный ActionResult для возврата байтового содержимого. Он уже существует, он называется FileResult.

В вашем контроллере вы бы использовали метод File следующим образом:

public ActionResult Do()
{
    return File(byteContentOrStream, "image/bmp", "yourfilename.bmp");
}

Третий параметр задает имя файла в расположении содержимого.

Настройка размещения контента самостоятельно будет работать; но это встроено в ASP.NET и обрабатывает вещи в соответствии с RFC 2183 . Например, он обрабатывает правильное экранирование, если имя файла содержит кавычку.

3 голосов
/ 02 ноября 2011

Стандартный способ «предложить» имя файла для браузера - включить заголовок Content-Disposition в ответ .Как то так:

Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.bmp", someString));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...