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

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

ただいまの
回答率

89.97%

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

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 9,665
退会済みユーザー

退会済みユーザー

前提・実現したいこと

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

default.aspx

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

C#

protected void func(object sender,EventArgs e)
 {
 string fileName = "C:\テストファイル.xlsx";
 string content = ????//このパラメータよくわからない

Response.ContentType = "application/download";
 Response.ContentEncoding = System.Text.Encoding.GetEncoding("Shift_JIS");
 Response.AppendHeader("Content-Disposition", "Attachment; filename=" + HttpUtility.UrlEncode(fileName));
 Response.Write(content);
 Response.End();
 }

補足情報(言語/FW/ツール等のバージョンなど)

ASP webform(C#)
.netframework3.5

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2016/09/30 17:58

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

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2016/09/30 18:53

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

    キャンセル

回答 2

checkベストアンサー

+1

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

string fileName = "C:\\テストファイル.xlsx";

var file = new System.IO.FileInfo(fileName);

var contentType = "";
switch (file.Extension.ToLower())
{
    case ".csv": contentType = "text/comma-separated-values"; break;
    case ".xls": contentType = "application/vnd.ms-excel"; break;
    case ".xlsx": contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break;
    default: contentType = "text/plain"; break;
}

Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(file.Name));
Response.ContentType = contentType;

Response.WriteFile(file.FullName);
Response.Flush();

try
{
    Response.End();
}
catch (ExceptionSystem.Threading.ThreadAbortException e)
{
    // Response.End()で必ず発生するので、何もしない
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/10/01 10:47

    twck さん

    横レス大変失礼しました。

    「とりあえず動くものがないと初心者にとっては手掛かりすらつかめない」というのはその通りだと思いますし、取っ掛かりを示してそれをブラッシュアップしていくと言う方法もいいと思います。

    ただ、質問者さんはコピペして動けばそれで終わりにすると言う感じがしました。このスレッドにかかわったものとしてはそれではちょっと何なので指摘させていただきました。


    以下は自分の個人的な考えなので賛成できないと言われるかもしれませんが、その場合はスルーしてください。

    自分は、特に質問者さんが初心者の場合は、質問者さんの環境や、やりたいことのシナリオを聞いてから回答した方がいいと思っています。

    たとえば、今回、質問者さんは最初の質問ではブラウザに何を使うかさえ示していません。もし、Firefox も対象とするならファイル名を UrlEncode するのは NG です。

    ダウンロードする Excel ファイルは、既存のものではなく、要求を受けてから生成して、ダウンロードが終わったら消すのだそうですが、それとの整合も課題になりそうです。

    その前に、Excel ファイルをどうやって作るのかという課題があって、それがクリアできなければなんともなりません。

    なので、全体のシナリオを実現できる見通しがある程度立ってから局部的な課題の解決(今回の場合どのようにダウンロードしたら良いのか)を考えるべきだと自分は思っています。

    キャンセル

  • 2016/10/01 12:05

    SurferOnWwwさんへ。
    そうですね。私もこれが社内の人間からの質問であればプロジェクト全体から見て最善の方法を詳細に教えるし、やってはいけないことも教えるんですが、Q&Aサイトだと懇切丁寧に書いても報われないんですよね。

    多分、SurferOnWwwさんはいい人過ぎるんですよ。なので親身になって全体から見た最善策を教えるのだと思いますが、初心者ってその親切が分からないものですし、SurferOnWwwさんは親身なだけに分かってくれない初心者に怒りを感じると思います。

    プログラム初心者って質問の仕方も初心者なので特にね。

    ちなみに私も質問者さんの他の質問が気になったのでちょっと見てみました。EXCELのサーバーサイドオートメーションを気にしてらっしゃいましたが、ソースにusing ClosedXML; と書かれていたのでその辺は問題ないかと。

    キャンセル

  • 2016/10/01 15:53 編集

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

    SurferOnWww様
    深い配慮ありがとうございます。
    意図を理解できず不快にさせて大変申し訳ございませんでした。
    今後もとんちんかんな質問をあげるかもしれません、
    もしお目溢しをいただけるのであればご指導賜れますようよろしくお願いいたします。

    キャンセル

+1

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/30 23:07 編集

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

    キャンセル

  • 2016/10/01 14:29

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

    キャンセル

  • 2016/10/01 15:27 編集

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

    キャンセル

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

  • ただいまの回答率 89.97%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる