none
DBからバイナリファイルをダウンロードしたい RRS feed

  • 質問

  • いつもお世話になっております。

    開発環境
    言語 = C#
    OS   = Win7
    DB   = SeqServer 2014

    下記のプログラムにて、DBに登録したバイナリデータをダウンロードしたいと
    考えておりますが、ダウンロードファイルが1KBバイトで正しく落とせません。

    登録済みデータは正しく登録出来ている事をバイト文字列で確認済みです。

    登録前とDBより取得した【fileTable.File_Stream】には同様に20579バイト格納されている事が
    デバッグで判っておりますが、何がいけないのかご教示頂きたく、投稿させて頂きます。


    string fileName;

    fileName = HttpUtility.UrlEncode(dtToday);
    fileName = fileName.Replace("+", "%20");
    fileName = HttpUtility.UrlDecode(fileName);

    Response.Clear();

    Response.HeaderEncoding = Encoding.GetEncoding("shift_jis");
    Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xlsx");

    Response.Write(fileTable.File_Stream);

    Response.Flush();
    Response.End();


    以上、何卒宜しくお願い申し上げます。

    2017年3月3日 12:17

回答

  • いつもお世話になっております。
    申し訳御座いません、1つのファイルのみで試していた為、
    確認しておりませんでした。

    また、下記のように致しましたら正しくダウンロード及び、問題なく開ける事が確認出来ましたので
    ご報告させて頂きます。

     Byte[] bytes = (Byte[])fileTable.File_Stream;
     Response.Buffer = true;
     Response.Charset = "";
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     Response.ContentType = "application / force - download";
     Response.AddHeader("content-disposition", "attachment;filename=" + fileTable.Name);
     Response.BinaryWrite(bytes);
     Response.Flush();
     Response.End();


    以上です。

    • 回答としてマーク kong0214 2017年3月3日 12:55
    2017年3月3日 12:55

すべての返信

  • SQL Server のフォーラムで質問されてますが、質問内容は ASP.NET Web Forms アプリの問題です。適切なフォーラムを選んで投稿いただけませんか。

    あと、開発環境を書いてください。(ASP.NET 関係のです)

    > ダウンロードファイルが1KBバイトで正しく落とせません。

    とのことですが、サイズの問題なのですか? サイズが大きいファイルなら問題ないのですか?


    • 編集済み SurferOnWww 2017年3月3日 12:51 一部追記
    2017年3月3日 12:39
  • いつもお世話になっております。
    申し訳御座いません、1つのファイルのみで試していた為、
    確認しておりませんでした。

    また、下記のように致しましたら正しくダウンロード及び、問題なく開ける事が確認出来ましたので
    ご報告させて頂きます。

     Byte[] bytes = (Byte[])fileTable.File_Stream;
     Response.Buffer = true;
     Response.Charset = "";
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     Response.ContentType = "application / force - download";
     Response.AddHeader("content-disposition", "attachment;filename=" + fileTable.Name);
     Response.BinaryWrite(bytes);
     Response.Flush();
     Response.End();


    以上です。

    • 回答としてマーク kong0214 2017年3月3日 12:55
    2017年3月3日 12:55
  • 1 時間もしないうちに自己解決とかで終わりにするなら、質問する前にもっとよく考えて、質問しないで済ませるようにしていただければと思います。

    回答としてマークが付けられているコード、回答とするにはいかがなものかと思う内容なのですが・・・

    2017年3月3日 13:09
  • いつもお世話になっております。

    投稿する場所が適切でなくて申し訳ござません。

    また、投稿してから1値時間以内に自己解決した件につきましては、
    投稿する前に半日近く悩み、投稿後もチャレンジを継続していた為、
    結果的に投稿⇒自己解決までの時間が短くなってしまいましたが、
    決して安易に投稿した訳では御座いません。

    最後に、回答としてマークをつけた内容ですが、
    間違っているのでしたら、正しい内容をご教示頂けると助かります。
    それに合わせて、掲示板を修正させて頂きます。


    以上です。

    2017年3月6日 1:35
  • > 決して安易に投稿した訳では御座いません。

    ちょっと誤解があるような気がします。

    投稿が安易か否かは置いといて、ここは開発者同士の情報交換の場所ということですから、1 時間もしないうちに自己解決とかでいきなり一方的に終わりにしないで、少し Q&A を続けて、例えば、質問者さんの解決されたというコードをブラッシュアップするというようなことを考えていただければと思います。

    > 間違っているのでしたら、正しい内容をご教示頂けると助かります。

    質問者さんの目的を果たせたということですから、その意味に限れば間違っているというわけではないと思います。

    ただし、日本語ファイル名の対応(最初の質問にあったコード)、キャッシュの設定、ContentType の設定、Response.Flush()、Response.End() あたりは考えた方がいいと思います。


    • 編集済み SurferOnWww 2017年3月6日 2:40 一部追記
    2017年3月6日 2:37
  • いつもお世話になっております。

    下記につきましてはとりあえずこれで動いたので・・・という報告で終わらせておりました。
    正直、下記の意味をあまり理解しておりませんでした。
    >ただし、日本語ファイル名の対応(最初の質問にあったコード)、キャッシュの設定、ContentType の設定、
    >Response.Flush()、Response.End() あたりは考えた方がいいと思います。

    情報交換の場と考えたとき、結果的に間違いがあったとしても自分なりの考えがあってこそ
    ココに載せるべきでした。
    申し訳御座いません。

    以後、気をつけたいと存じます。
    以上です。

    2017年3月8日 3:06
  • 補足するなら、今回の投稿の場合、「上手くいかなかったけど色々試したら動いた」というだけの話で、このフォーラムの目的である情報交換による Q&A サイトとしての「有益な情報の蓄積」が何もないという所に問題を感じ得るのだと思います。

    『下記のように致しましたら』として投稿さているコードのどの変更が有効だったのか、そこから考えられる元のコードの問題点(うまくいかない原因)は何か、という、同様の問題で情報を探す人にとっての有益な内容がありません。

    自己解決してしまうような質問を投稿すること自体は悪くありませんが、この場を利用して質問する以上、この場に貢献できるような情報の出し方を考えられると良いかと思います。


    hebikuzure

    2017年3月8日 4:56