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");
634   6  

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

    Ничего не найдено.