Файл .Net MVC приводит к повреждению файла png, на один байт меньше

#.net #asp.net-mvc-3 #mime-types

#.net #asp.net-mvc-3 #mime-типы

Вопрос:

У нас есть действие для загрузки файла изображения. код является

 public virtual FileResult Attachment(Guid Id)
        {
            ...code for attachment..

            Response.AddHeader("content-disposition", "attachment; filename="   attachment.FileName);
            Response.AddHeader("content-type", attachment.ContentType);
            Response.AddHeader("cache-control", "must-revalidate");
            return File(attachment.Content, attachment.ContentType);

        }
  

Когда мы тестируем это действие, мы всегда получаем поврежденный файл. Я сравнил поврежденный файл с исходным пользовательским блокнотом и обнаружил, что в файл добавлен один символ новой строки. Я удалил новую строку в notepad , и изображение было исправлено.

Мы проверили содержимое вложения и уверены, что содержимое было правильным.

Мы запускаем .net mvc 3. тип содержимого, который у нас был для png, — «image / png»

Комментарии:

1. что attachment.Content ?

2. Как он устанавливается? Подтверждено ли, что он правильный?

3. да, это было подтверждено правильно.

4. Когда вы тестируете, вы тестируете как модульный тест или непосредственно в веб-браузере?

5. Я сделал оба. Модульное тестирование и вставка фрагмента кода в контроллер для принудительной записи в файловую систему. Оба результата были правильными.

Ответ №1:

Скрипач результат (ie fiddler2.com ) и посмотрите на заголовки и результат. Вы также можете сохранить результаты оттуда и протестировать файл. Новая строка в начале или в конце? если начало, то его вероятные заголовки. ЕСЛИ он в конце, запускаете ли вы какие-либо ActionFilters, которые могут добавлять пустой результат (или вы так думаете), который на самом деле является добавленной новой строкой? Протестируйте его с другим файлом — те же результаты?

Протестируйте его на другой системе, если это возможно — те же результаты?

Комментарии:

1. Спасибо, проблема была обнаружена в переопределении метода OnActionExecuting нашего BaseController. Он вставляет новую строку в вывод в произвольном месте. Должен быть хорошим кандидатом для thedailywtf 🙂

Ответ №2:

Проверьте, какие другие заголовки уже были заполнены в ответе до (или после) добавления ваших пользовательских заголовков. Возможно, вы получаете какие-то посторонние заголовки, которые вызывают проблему.

Это может быть так же просто, как вызов очистителей

Такой инструмент, как дополнение Live Http Headers Firefox, также может быть полезен.