#.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, также может быть полезен.