Chrome, pdf дисплей, дубликаты заголовков, полученных с сервера
у меня есть раздел на веб-сайте, где я показываю pdf внутри светового ящика. Недавнее обновление chrome нарушило это отображение:
ошибка 349 (net:: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):
Получено несколько заголовков размещения содержимого. Это запрещено
защита от атак с разделением ответов HTTP.
Это все еще работает правильно в IE.
Я использую ASP.NET MVC3 на IIS6
код, который я использую для сгенерировать файл можно следующим образом.
если я удалю встроенный оператор, то файл загружается, однако это нарушает функциональность лайтбокса.
Код
public FileResult PrintServices()
{
//... unrelated code removed
MemoryStream memoryStream = new MemoryStream();
pdfRenderer.PdfDocument.Save(memoryStream);
string filename = "ServicesSummary.pdf";
Response.AppendHeader("Content-Disposition", "inline;");
return File(memoryStream.ToArray(), "application/pdf", filename);
}
Исправления
удалить
Response.AppendHeader("Content-Disposition", "inline;");
Затем Измените
return File(memoryStream.ToArray(), "application/pdf", filename);
до
return File(memoryStream.ToArray(), "application/pdf");
6 ответов:
вышеуказанное решение в порядке, если вам не нужно указывать имя файла, но мы хотели сохранить имя по умолчанию для пользователя.
наше решение закончилось тем, что само имя файла содержало некоторые запятые. Я сделал замену на запятые с "" и файл теперь доставляет документ, как и ожидалось в Chrome.
FileName = FileName.Replace(",", "") Response.ContentType = "application/pdf" Response.AddHeader("content-disposition", "attachment; filename=" & FileName) Response.BinaryWrite(myPDF)
я использовал комментарий @roryok, обертывая имя файла в кавычки:
Response.AddHeader("content-disposition", "attachment; filename=\"" + FileName + "\"")@ответ Кодера на использование одинарных кавычек не работал, как ожидалось в IE. Файл, загруженный с одинарными кавычками, все еще находится в имени.
сегодня эта проблема. В roryok и других, решение состояло в том, чтобы поместить имя файла в кавычки.
предыдущий, Chrome FAIL:
header("Content-Disposition: attachment; filename=$file");Current, Chrome OK:
header("Content-Disposition: attachment; filename='$file'");обратите внимание на кавычки
$file.
чтобы исправить это для любого типа файлов с пользовательским именем файла удалите (или аналогичные заголовки)
Response.AppendHeader("Content-Disposition", "inline;");и добавить
string fileName = "myfile.xlsx" return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName);вы также можете использовать путь к файлу вместо потока в первом параметре
моя проблема была из-за двойной кавычки, как показано ниже:
var encoding = System.Text.Encoding.UTF8; *Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**\"{0}\"**", HttpUtility.UrlEncode(file, encoding)));*изменить, чтобы это работало!
*Response.AddHeader("Content-Disposition", string.Format("attachment; filename=**{0}**", HttpUtility.UrlEncode(file, encoding)));*
у меня была та же проблема, и я исправил ее, просто удалив имя файла из инструкции return.
изменения:
return File(outStream.ToArray(), "application/pdf", "Certificate.pdf");to:
return File(outStream.ToArray(), "application/pdf");и держал:
Response.AddHeader("content-disposition", "attachment;filename=\"" + "Certificate.pdf" + "\"");Это все еще сохраняет имя для загружаемого файла.
Comments