FileResult возвращает поврежденный файл - PullRequest
1 голос
/ 27 августа 2010

Я создаю простое действие контроллера в ASP.NET MVC 2 (в рамках .NET 4.0 framework), которое будет изменять размеры файлов.

У меня есть такой контроллер (я его обрезал)немного вниз):

public ActionResult GetFile(int fileId, string fileSource) {
    FileInfo file = repo.FindFileById(fileId);

    //do some resizing

    string mimeType = string.Empty;
    switch(file.Extension) {
        case ".jpg":
            mimeType = "image/jpg";
            break;
        //some more stuff
        default:
            mimeType = "text/png";
            break;
    }

    return File(file.FullName, mimeType);
}

В файловой системе все отлично сохраняется, я могу просмотреть измененный размер файла, но в браузере файл не отображается.

Я использовалЧарльз проверяет ответ и возвращает HTTP-статус 200, но изображение не видно.

Если я пытаюсь сохранить изображение и просмотреть его, программа просмотра изображений Windows сообщает, что он поврежден.

Я также пытался использовать ZIP (без изменения размера;)), и он возвращает поврежденный ZIP-файл.

Я уверен, что просто делаю что-то не так, но не могу на всю жизньс моей стороны.

Редактировать

Я тестировал и в Cassini, и в IIS 7.5 (Windows 7) и устранял проблему в обоих случаях.

Ответы [ 4 ]

1 голос
/ 28 августа 2010

Я бы порекомендовал вам приступить к ликвидации.Начните с простого действия и рабочего изображения в формате JPEG:

public ActionResult Index()
{
    return File("test.jpg", "image/jpeg");
}

Если это не сработает, возможно, у вас возникли другие проблемы (вы также можете попробовать очистить кеш браузера).Если это работает, замените test.jpg на тот, который у вас есть, но перед изменением размера и т. Д., Пока не найдете проблему.

0 голосов
/ 20 октября 2016

Попробуйте использовать FileResult вместо ActionResult

0 голосов
/ 29 августа 2010

Оказывается, проблема вызвана модулем сжатия Http, который работает на сайте, он пытается преобразовать отклик изображения, повреждая изображение.

0 голосов
/ 28 августа 2010

Правильный тип пантомимы для jpeg: image / jpeg, а не image / jpg.Это может вызвать проблемы.

Вы также должны опубликовать свой код для изменения размера, так как это, вероятно, причина вашего поврежденияЧто произойдет, если вы просто прочитаете штраф и выпишете его обратно?

...