ユーザーにいくつかのドキュメントを表示するMVCプロジェクトがあります。ファイルは現在、Azure BLOBストレージに保存されています。
現在、ドキュメントは次のコントローラーアクションから取得されます。
[GET("{zipCode}/{loanNumber}/{classification}/{fileName}")]
public ActionResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
// get byte array from blob storage
byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
string mimeType = "application/octet-stream";
return File(doc, mimeType, fileName);
}
現在、ユーザーが次のようなリンクをクリックすると:
<a target="_blank" href="http://...controller//GetDocument?zipCode=84016&loanNumber=12345678classification=document&fileName=importantfile.pdf
次に、ファイルがブラウザーのダウンロードフォルダーにダウンロードされます。私がやりたいのは(そして、デフォルトの動作だと思っていた)、ファイルをブラウザに表示するだけです。
Mimetypeを変更し、戻り値の型をActionResultではなくFileResultに変更してみましたが、どちらも無効です。
ダウンロードする代わりにブラウザでファイルを表示するにはどうすればよいですか?
すべての答えのおかげで、解決策はそれらすべての組み合わせでした。
まず、byte[]
を使用していたため、コントローラーアクションはFileContentResult
だけでなくFileResult
である必要がありました。これは次のおかげで見つかりました。 ASP.NET MVCの4つのファイル結果の違い
次に、MIMEタイプはoctet-stream
である必要はありません。おそらく、ストリームを使用すると、ブラウザはファイルをダウンロードするだけになります。タイプapplication/pdf
を変更する必要がありました。ただし、他の種類のファイル/ MIMEを処理するには、より堅牢なソリューションを検討する必要があります。
第三に、content-disposition
をinline
に変更するヘッダーを追加する必要がありました。 この投稿 を使用すると、content-dispositionが既にattachment
に設定されているため、ヘッダーの重複を防ぐためにコードを変更する必要があることがわかりました。
成功したコード:
public FileContentResult GetDocument(string zipCode, string loanNumber, string classification, string fileName)
{
byte[] doc = _docService.GetDocument(zipCode, loanNumber, classification, fileName);
string mimeType = "application/pdf"
Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName);
return File(doc, mimeType);
}
他の誰かが少し前に同様の質問をしたようです。
ヘッダーを使用する必要があるという回答があります:
Content-Disposition: inline; filename.pdf
ブラウザは、MIMEタイプに基づいてダウンロードまたは表示を決定する必要があります。
これを試して:
string mimeType = "application/pdf";