質問するログイン新規登録

回答編集履歴

1

追記

2017/06/05 06:26

投稿

退会済みユーザー
answer CHANGED
@@ -5,4 +5,34 @@
5
5
 
6
6
  その方向でやってみて、不明点があれば質問してください。
7
7
 
8
- なお、js で行うというのは考えない方がよさそうです。
8
+ なお、js で行うというのは考えない方がよさそうです。
9
+
10
+ ----- 2017/6/5 15:26 追記 -----
11
+
12
+ 2017/06/05 14:50 の私のコメントで「return File(path, "text/plain", "TestFileName"); というのはちょっと問題がありそうな気がしますので、老婆心かもしれませんが、注意事項を回答欄に書いておきます」と書きましたが、それを以下に書いておきます。
13
+
14
+ ブラウザによって、応答ヘッダーの Content-Disposition: attachment; filename= で指定するファイル名の拡張子と、Content-Type: で指定する MIME Type のどちらでファイルの種類を判断するかが異なります。
15
+
16
+ なので、Content-Type と Content-Disposition の両方を正しく設定してやる必要があります。
17
+
18
+ それを設定するのが File メソッドの第 2, 3 引数です。
19
+
20
+ 質問者さんのコードのように、
21
+
22
+ ```
23
+ public ActionResult DownLoadTest(string path)
24
+ {
25
+ return File(path, "text/plain", "TestFileName");
26
+ }
27
+ ```
28
+
29
+ としたとすると、応答ヘッダの Content-Disposition と Content-Type は以下のようになるはずです。
30
+
31
+ ```
32
+ Content-Type: text/plain
33
+ Content-Disposition: attachment; filename=TestFileName
34
+ ```
35
+
36
+ Content-Type の方はダウンロードするファイルがホントにテキストファイルならそれでもいいですが、例えば .jpg ですと image/jpeg のようにしないとダメです。(ブラウザによっては、Content-Type の指定通り拡張子を書き換えてしまうものがあります)
37
+
38
+ Content-Disposition に設定するファイル名 TestFileName の方は拡張子まで指定するようにしてください。(テキストファイルなら TestFileName.txt、.jpg ファイルなら TestFileName.jpg というように)