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

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

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

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

HTML

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

21818閲覧

ファイルダウンロードの実装方法について

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

HTML

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

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2016/09/30 08:39

###前提・実現したいこと
Excelファイルやcsvをダウンロードさせる機能の実装がうまくできておりません。
ブラウジングで情報収集を試みましたが当方初心者のためサイトに書かれている内容が
今一つ理解できない状況です。
今試しているコードも怪しい理解です。
ファイルのダウンロードボタン実装方法についてご教授願えませんでしょうか。

###default.aspx

default.aspx

1 <asp:Button ID="ダウンロードボタン" runat="server" Text="OK" OnClick="func" />

###C#

C#

1 protected void func(object sender,EventArgs e) 2 { 3 string fileName = "C:\テストファイル.xlsx"; 4 string content = ????//このパラメータよくわからない 5 6Response.ContentType = "application/download"; 7 Response.ContentEncoding = System.Text.Encoding.GetEncoding("Shift_JIS"); 8 Response.AppendHeader("Content-Disposition", "Attachment; filename=" + HttpUtility.UrlEncode(fileName)); 9 Response.Write(content); 10 Response.End(); 11 }

###補足情報(言語/FW/ツール等のバージョンなど)
ASP webform(C#)
.netframework3.5

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/09/30 08:58

前のスレッドでは IE 限定で良いとの話でしたがそこは変わらないですか? IE のバージョンは? IE9 以降でいいのですか? ダウンロードするのは Excel と CSV だけでいいのですか? Excel ファイルの種類は? 全体的なシナリオ(例:初期画面は GridView にファイル一覧を表示。ファイルは Web アプリの特定のフォルダに保存してある。GridView に表示されたファイルを選択後、ダウンロードボタンをクリックすると選択したファイルがダウンロードされる等)を書いてもらえませんか?
退会済みユーザー

退会済みユーザー

2016/09/30 09:53

ブラウザはIE10で動けば問題ありません。 ダウンロードファイルについてはExcelとCSVが中心です。(PDFもあるかも) 基本動作としては 1.画面上部に検索フォーム 画面下部に表(Listview)があり検索結果が一覧ででている。 2.ナビバーのボタンを押すと表の情報に情報や見栄えをいろいろ変更したExcelファイルを一時フォルダに生成してダウンロードさせる ダウンロードが終わったファイルは削除する。 そんな感じをイメージしてます。
guest

回答2

0

ナビバーのボタンを押すと表の情報に情報や見栄えをいろいろ変更したExcelファイルを一時フォルダに生成して

それをどうやってやるつもりですか? そもそも、Microsoft が推奨もサポートもしてないことをやろうとしてませんか?

Office のサーバーサイド オートメーションについて
https://support.microsoft.com/ja-jp/kb/257757

そうだとすると、ダウンロードをどうするかという局所的な問題を考えるより先に、全体のシナリオを考え直した方がよさそうですよ。

#スレチですが一言クレームを。先のスレッドの対応はあんまりと思いませんか?

投稿2016/09/30 11:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2016/09/30 13:05 編集

すみません、先のスレッドの対応とは何のことでしょう? アドバイスいただいた通りでスレッドを閉じただけ (回答によって何か進展したわけでもないので自己解決という形で) の認識をしております。 何か間違いがございましたらご指摘いただければ幸いです。 なお、そもそも論は少なくとも今は考慮の必要ないという前提で ご認識をお願いします。
退会済みユーザー

退会済みユーザー

2016/09/30 13:15

「回答によって何か進展したわけでもない」って、どうしてそういうことが言えるのですか? そのスレッドでのあなたの質問「ダウンロード先の指定」の回答になってないと言うのですか? 回答になってないなら、あなたの質問の仕方が間違っていたのではないですか? クローズする前に、そのあたりきちんと書いてもらえませんか。それが回答するという努力をしてくれた人へのマナーだと自分は思うのですが。
退会済みユーザー

退会済みユーザー

2016/09/30 13:55 編集

はい。タイトルが間違っておりましたのでその旨記載してクローズしました。 「回答によって何か進展したわけでもない」という言葉だけとると私が不満に思っているかのようですが、そういう意図はありません。 質問側は「タイトルの回答」ではなく「困っていることに対しての回答」を期待しております。(前回の場合は詳細の記述に書いてある内容ですね) 困っていることが解決に向けて進展がなければ「タイトル通りだ」といくら主張しても 水掛け論になることだけはご認識ください。 前回(厳密にはまだ今回もですが)こそ解決にいたりませんでしたが 貴殿の回答努力には大変助けられており、感謝の言葉もございません。 対応に誤りがあったとは思っておりませんが不快にさせた点は大変遺憾です。
退会済みユーザー

退会済みユーザー

2016/09/30 14:01

タイトルと内容は一緒だとしか自分には思えませんが。 タイトル:ダウンロード先の指定 内容: <asp:FileUpload ID="FileUpload1" runat="server" /> で表示されるようなエクスプローラ参照でダウンロード先を指定させたいのですが アイデアが浮かばない状況です。 アドバイスお願いできませんでしょうか。 (Excelなどの「名前を付けて保存」のようなイメージでダウンロードを実現したいです 自分は「困っていることに対しての回答」をしたつもりです。 もういいや。
退会済みユーザー

退会済みユーザー

2016/09/30 14:10 編集

本スレッドの回答になっておらず、不要であるため下げておきます。
len_souko

2016/10/01 05:29

noobpg=sin256ですかね? 「アップロードファイルはどこへいくの?」見てると同じような感じのやり取りしてるし同一人物っぽく書き込んでるし
退会済みユーザー

退会済みユーザー

2016/10/01 06:55 編集

はい、その通りです。 アカウントパスワード暗記してなく外で書き込めなかったので一時的にsin256を作成しました。 アカウント削除機能がないためそのままにしております。
guest

0

ベストアンサー

こんな感じかなあ?
VB から C# に書き換えたからミスがあるかもしれないけど。

C#

1string fileName = "C:\\テストファイル.xlsx"; 2 3var file = new System.IO.FileInfo(fileName); 4 5var contentType = ""; 6switch (file.Extension.ToLower()) 7{ 8 case ".csv": contentType = "text/comma-separated-values"; break; 9 case ".xls": contentType = "application/vnd.ms-excel"; break; 10 case ".xlsx": contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; 11 default: contentType = "text/plain"; break; 12} 13 14Response.ClearContent(); 15Response.Buffer = true; 16Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(file.Name)); 17Response.ContentType = contentType; 18 19Response.WriteFile(file.FullName); 20Response.Flush(); 21 22try 23{ 24 Response.End(); 25} 26catch (ExceptionSystem.Threading.ThreadAbortException e) 27{ 28 // Response.End()で必ず発生するので、何もしない 29}

投稿2016/09/30 09:30

twck

総合スコア314

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

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

退会済みユーザー

退会済みユーザー

2016/09/30 09:57

コピーして試してみようとしましたが ExceptionSystem の部分がVisualkStudio上で波線になってしまいコンパイルできませんでした。
退会済みユーザー

退会済みユーザー

2016/09/30 11:41

横レス失礼します。Response.Flush() すると chunked コーディングになります。それは意図してないですよね? Response.End() メソッドの使用は非推奨になっています。理由は、End メソッドでスローされる ThreadAbortException がパフォーマンスに悪影響を及ぼすからだそうです。と言って、何もしないと ```<!DOCTYPE html ...``` 以下の html ソースもダウンロードされてしまいますが。なので、ダウンロードには HTTP ハンドラを利用するのがお勧めです。あと、Response.WriteFile メソッドはファイルサイズが大きい場合は対応できません。TransmitFile メソッドを使った方がよさそうです。
退会済みユーザー

退会済みユーザー

2016/09/30 16:34

無事解決しました。 両名ともありがとうございました。
twck

2016/09/30 17:39

noobpgさんへ。 解決したようでなによりです。 私の回答で解決したのか、それとも自己解決したのか書いてないので分かりませんが、SurferOnWwwさんがおっしゃってるように私の回答にはいくつかの問題点があります。 私の回答で解決したのであれば、後々noobpgさんの ASP.NET の知識が深まってから見直して修正してくださいね。
twck

2016/09/30 17:41

SurferOnWwwさんへ。 いやもうおっしゃってること 1 から 10 までその通りです。 ただ、質問者さんの今の知識では HTTP ハンドラ を使えって言っても無理ですし、環境が分からないのでHTTP ハンドラ の使い方を詳しく解説するのは私には難しいです。 問題があっても動けばいいとは思っていませんが、とりあえず動くものがないと初心者にとっては手掛かりすらつかめないので、質問文中のソースをなるべくそのまま使うようにしました。 どうもありがとうございました。
退会済みユーザー

退会済みユーザー

2016/10/01 01:47

twck さん 横レス大変失礼しました。 「とりあえず動くものがないと初心者にとっては手掛かりすらつかめない」というのはその通りだと思いますし、取っ掛かりを示してそれをブラッシュアップしていくと言う方法もいいと思います。 ただ、質問者さんはコピペして動けばそれで終わりにすると言う感じがしました。このスレッドにかかわったものとしてはそれではちょっと何なので指摘させていただきました。 以下は自分の個人的な考えなので賛成できないと言われるかもしれませんが、その場合はスルーしてください。 自分は、特に質問者さんが初心者の場合は、質問者さんの環境や、やりたいことのシナリオを聞いてから回答した方がいいと思っています。 たとえば、今回、質問者さんは最初の質問ではブラウザに何を使うかさえ示していません。もし、Firefox も対象とするならファイル名を UrlEncode するのは NG です。 ダウンロードする Excel ファイルは、既存のものではなく、要求を受けてから生成して、ダウンロードが終わったら消すのだそうですが、それとの整合も課題になりそうです。 その前に、Excel ファイルをどうやって作るのかという課題があって、それがクリアできなければなんともなりません。 なので、全体のシナリオを実現できる見通しがある程度立ってから局部的な課題の解決(今回の場合どのようにダウンロードしたら良いのか)を考えるべきだと自分は思っています。
twck

2016/10/01 03:05

SurferOnWwwさんへ。 そうですね。私もこれが社内の人間からの質問であればプロジェクト全体から見て最善の方法を詳細に教えるし、やってはいけないことも教えるんですが、Q&Aサイトだと懇切丁寧に書いても報われないんですよね。 多分、SurferOnWwwさんはいい人過ぎるんですよ。なので親身になって全体から見た最善策を教えるのだと思いますが、初心者ってその親切が分からないものですし、SurferOnWwwさんは親身なだけに分かってくれない初心者に怒りを感じると思います。 プログラム初心者って質問の仕方も初心者なので特にね。 ちなみに私も質問者さんの他の質問が気になったのでちょっと見てみました。EXCELのサーバーサイドオートメーションを気にしてらっしゃいましたが、ソースにusing ClosedXML; と書かれていたのでその辺は問題ないかと。
退会済みユーザー

退会済みユーザー

2016/10/01 06:54 編集

お二人とも私の能力に合わせて考慮いただきありがとうございます。 twck様のおっしゃるとおり自分の聞きたい内容を言葉にできていないようです。 SurferOnWww様の意図を理解できず、ダイレクトな解決法、その手掛かりではない 返答であることに苛立ちを覚えていた自分を恥ずかしく思います。 今はまだお二人の議論についていけておりませんが理解できるよう精進したいと思います。 twck様、SurferOnWww様両名に厚く御礼申し上げたく思います。 SurferOnWww様 深い配慮ありがとうございます。 意図を理解できず不快にさせて大変申し訳ございませんでした。 今後もとんちんかんな質問をあげるかもしれません、 もしお目溢しをいただけるのであればご指導賜れますようよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問