質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

20733閲覧

C# MVC サーバーで読み込んだPDFファイルを表示

DgRp_08

総合スコア56

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2017/02/01 13:12

C#.netのmvcで、ファイル名のリンクから新規タブで該当のPDFファイルをブラウザで表示する処理を実現させたいです。
ブラウザはGoogle Chromeです。

ただし、ファイル格納場所が、サーバーからURL指定出来ない場所に固定されているため、一度読み込んだものを表示させようとしておりますが、上手くいきません。
以下2パターンの方法を試しております。
(※手書きメモを転記しているので入力ミスなどありましたらスルーしてください)

①ファイル名リンクをクリック後ファイルを読み込み「target="_blank"」で新規タブ表示
→課題点:ダウンロードになってしまいブラウザに表示ができない

html

1<!--実際は cshtml--> 2<a href="@Url.Action("GetPdf","FileCtrl",new{fileName="file.pdf"})" target="_blank">file.pdf</a> 3<!--リンククリックで下記C#へ-->

C#

1//FileCtrlController 2public ActionResult GetPdf(string fileName) 3{ 4 //[]内は仮表記 5 var filePath = [ファイルフルパス]+fileName; 6 byte[] data = System.IO.File.ReadAllBytes(filePath); 7 return File(data, "application/octet-stream", fileName) 8 //処理後、ファイル保存ダイアログが表示され、 9 //ブラウザに表示することが出来ない 10}

②ファイル名リンクをクリック後JavaScriptでwindow.open処理を実行し、新しいタブで別のViewを開く。開かれたViewでobjectタグを使用してPDFを埋め込み表示
→問題点:ChromeでPDFドキュメントが読み込めない現象発生中(IEでは表示される)

html

1<a href="JavaScript:OnclickFunction(略)">file.pdf</a> 2 3<script type="text/javascript"> 4 function OnclickFunction(){ 5 window.open() 6 //詳細は省きます。。。次のHTMLコードのページ表示 7 } 8</script>

html

1<!--実際は cshtml--> 2<object data="@Url.Action("GetPdf","FileCtrl", new{fileName="file.pdf"})" type="application/pdf"> 3<!--下記C#の処理が実行されて埋め込みPDFが表示されるはずだが、 4現在「ドキュメントが読み込めませんでした」的なメッセージが表示されPDFが表示されない。 5(pdf Viewerのエリアは表示される)-->

C#

1//FileCtrlController 2public ActionResult GetPdf(string fileName) 3{ 4 //[]内は仮表記 5 var filePath = [ファイルフルパス]+fileName; 6 byte[] data = System.IO.File.ReadAllBytes(filePath); 7 return File(data, "application/pdf", fileName) 8}

詳細を省略しまくりで申し訳ありませんが、もし、不適切な点や他に実現できそうな方法がありましたらアドバイスを頂きたいです。
一番の理想は、埋め込み表示ではなく、新しいタブでPDFファイルがViewerで表示される状態です。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

FileではなくFilePathResult を使用すればいけそうな気がします。

C#

1public ActionResult GetPdf(string fileName) 2{ 3 var filePath = [ファイルフルパス]+fileName; 4 return new FilePathResult(filePath, "application/pdf"); 5 6 // byte[] data = System.IO.File.ReadAllBytes(filePath); 7 // return File(data, "application/octet-stream", fileName) 8 //処理後、ファイル保存ダイアログが表示され、 9 //ブラウザに表示することが出来ない 10}

(1)で"application/octet-stream" にしているからダウンロードになるのでは?"application/pdf"を指定すればレスポンスヘッダーのContent-Typeがapplication/pdfになりませんか?

投稿2017/02/01 13:29

編集2017/02/03 03:23
Y.H.

総合スコア7914

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

DgRp_08

2017/02/02 00:19

回答有り難うございます。 retern Fileの部分ですよね? application/pdf に指定しても動作は変わらずダウンロードになります。
Y.H.

2017/02/02 00:30

この時の HTTPレスポンスヘッダーのContent-Typeは何になってますか?
DgRp_08

2017/02/03 02:27

返信遅くなりすみません。 レスポンスヘッダーというものをわかっておりませんでした。 確認の仕方が間違ってなければ、RESPONSE_HEADERという箇所のContent-Typeはapplication/jsonになっています。
DgRp_08

2017/02/03 05:00

FilePathResultで簡単に表示ができました。 このクラスの存在を初めて知ったので眼から鱗です。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問