ウェブサイトに、ライトボックス内にPDFを表示するセクションがあります。最近のchromeアップグレードにより、これが表示されなくなりました:
エラー349(net :: ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION):複数のContent-Dispositionヘッダーを受信しました。これは、HTTP応答分割攻撃から保護するために許可されていません。
これはIEでも正常に機能します。
IIS6でASP.NET MVC3を使用しています
ファイルの生成に使用するコードは次のとおりです。
インラインステートメントを削除すると、ファイルがダウンロードされますが、ライトボックスの機能が壊れます。
問題コード
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");
ファイル名を指定する必要がない場合は、上記の解決策で問題ありませんが、ユーザーに指定されたファイル名のデフォルトを維持する必要があります。
解決策は、ファイル名自体にコンマが含まれていたためです。カンマを「」に置き換えたところ、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");
現在、Chrome OK:
header("Content-Disposition: attachment; filename='$file'");
$file
を囲む引用符に注意してください。
私は同じ問題を抱えていましたが、returnステートメントからファイル名を削除するだけで修正しました。
変化する:
return File(outStream.ToArray(), "application/pdf", "Certificate.pdf");
に:
return File(outStream.ToArray(), "application/pdf");
そして、KEPT the:
Response.AddHeader("content-disposition", "attachment;filename=\"" + "Certificate.pdf" + "\"");
これにより、ダウンロードしたファイルの名前が保持されます。
私の問題は、次に示すように二重引用符によるものでした。
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)));*
カスタムファイル名を持つ任意のファイルタイプでこれを修正するには、(または同様のヘッダー)を削除します
Response.AppendHeader("Content-Disposition", "inline;");
そして追加
string fileName = "myfile.xlsx"
return File(fileStream, System.Web.MimeMapping.GetMimeMapping(Path.GetFileName(filePath)), fileName);
最初のパラメーターでストリームの代わりにファイルパスを使用することもできます