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

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

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

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

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

ASP.NET

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

Q&A

解決済

2回答

4107閲覧

C# ブラウザからzipフォルダをダウンロードしたい

DigDigBottom

総合スコア12

C#

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

.NET Framework 4.0

Microsoft Windows用のソフトウェア開発環境/実行環境である .NET Frameworkの4番目のメジャーバージョンです。

ASP.NET

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

0グッド

0クリップ

投稿2022/02/16 00:58

編集2022/02/16 02:39

C#で、サーバーのローカルにあるzipフォルダをブラウザからダウンロード出来るようにしたいです。

※追記
環境:ASP.NET Web Forms、
OS :Windows10、
IDE:Visual Studio 2017になります!
対象のブラウザ:Chrom,IE,FireFox,Edgeなどの主要ブラウザ
(IEなどは古すぎるバージョンに対応する必要なありません)

aspx:画面上にButtonコントロールを配置しています。
aspx.cs:ボタンクリック時に、
サーバーに置いてあるzipフォルダを、ブラウザ上からダウンロード出来るようにしたいです。
(クライアントがボタンをクリックすると、ブラウザかたYYYYMM.zipをダウンロードできる)

対象のzipフォルダは
C:\sample\YYYYMM.zip(フォルダ名は現在年+月)
のように置いてあります。
ただ、対象のフォルダはbatで作成しているので、zipフォルダでないバージョン
C:\sample\YYYYMM
の方が実装が簡単でしたら、これでも問題ありません。

中身はcsvが3つほど入っています。

.NET Framework4.5以降から、
ZipFileクラスやZipArchiveクラスといったzipを操作できるクラスが出来たようですが、
ブラウザからのダウンロードが出来る簡単な方法はありますでしょうか?
(DotNetZipのような、ライブラリを使用する方法は避けたいです。

※追記
頂いだコメントから、zipフォルダの実態はファイルだと知りましたので、
ブラウザからファイルをダウンロードするよう、実装中です!
今のコードでダウンロードは出来るのですが、
ブラウザからダウンロードが出来ず…
引き続き調べながら実装中です。

以下の画像のようなダウンロードを実装したいです。
イメージ説明

試したこと

C#

1protected void btnContentsLinklist_Click(object sender, EventArgs e) 2{ 3 string downloadFilePath = @"C:\sample\YYYYMM.zip"; 4 WebClient mywebClient = new WebClient(); 5 File.SetAttributes(downloadFilePath, FileAttributes.Normal); 6  //このメソッドだと、2番目の引数に指定したパスに勝手に出来てしまう… 7 mywebClient.DownloadFile(downloadFilePath, @"d:\myfile.zip"); 8}

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

HTMLのaタグ download属性も試してみましたが、
ブラウザは強力なウィルスのダウンロードを阻止するため、
ローカルのファイルはセキュリティ制約を外さないとダウンロード出来るようにならないらしいです…。
aタグからのアプローチはひとまず保留で考えています。
.NET Framework4.7です。

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

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

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

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

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

Zuishin

2022/02/16 01:24

Zip フォルダは Zip ファイルをフォルダとして扱うことのできる Windows の機能でしかありません。 実体はファイルなので、普通にダウンロードしてください。
DigDigBottom

2022/02/16 02:02

なるほど!ありがとうございます! おかげで進展しそうです!
退会済みユーザー

退会済みユーザー

2022/02/16 02:17

何を作っているか(ASP.NET Web Forms? MVC? WinForms? WPF? その他?)ぐらいは質問の一番最初に書こう。開発環境(OS, Visual Studio のバージョンなど)も書こう。
akiko_

2022/02/16 02:20 編集

作っているアプリはASP.NetのWeb Formsですか? ただのWinFormsですか?
退会済みユーザー

退会済みユーザー

2022/02/16 02:58

ASP.NET Web Forms アプリだそうですが、それはどこまでできているのですか? 運用環境で Web サーバーを建てて IIS でと言う話は盛りだくさん過ぎてここでは無理なので、まずは開発環境に話を限って、Visual Studio のテンプレートで ASP.NET Web Forms アプリを作って Visual Studio から IIS Express 上で実行して初期画面が表示できるようにしてください。話はそれからです。
guest

回答2

0

ベストアンサー

asp.net web formならこれでできるんじゃないかな

C#

1protected void btnContentsLinklist_Click(object sender, EventArgs e) 2{ 3 HttpResponse Response = HttpContext.Current.Response; 4 Response.Clear(); 5 Response.ContentType = "application/zip"; 6 Response.HeaderEncoding = Encoding.UTF8; 7 Response.ContentEncoding = Encoding.Unicode; 8 // ダウンロード時表示したい名前 9 Response.AddHeader("Content-Disposition", "attachment;filename=" +HttpUtility.UrlEncode($"YYYYMM.zip")); 10 // ダウンロードするzipファイルパス 11 Response.BinaryWrite(System.IO.File.ReadAllBytes(@"C:\sample\YYYYMM.zip")); 12}

投稿2022/02/16 02:46

akiko_

総合スコア35

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

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

DigDigBottom

2022/02/16 02:50

ご回答ありがとうございます! 早速やってみます!
DigDigBottom

2022/02/16 02:58

akiko_様! この度はご回答ありがとうございました! 頂いたコードを実装して試したところ、私の望み通りに動きました! やり方を模索してググっていた中で、 akiko_様が今回書いてくださったHttpResponseを使用したやり方を見た記憶がありますので (というより、私が迷走していただけで、こちらが正道なのでしょう)、 改めてこのメソッドについて勉強致します! この度はご回答いただきありがとうございました!BAにさせて頂きます!
akiko_

2022/02/16 03:06 編集

お役に立てて良かったです(❁´ω`❁)
退会済みユーザー

退会済みユーザー

2022/02/16 03:06

そのやり方では、サーバーは aspx ファイルに含まれている <!DOCTYPE ... で始まる html コードも生成し、それもクライアントに送信しませんか?
guest

0

画面上にButtonコントロールを配置しています。ボタンクリック時に、サーバーに置いてあるzipフォルダを、ブラウザ上からダウンロード出来るようにしたいです。(クライアントがボタンをクリックすると、ブラウザかたYYYYMM.zipをダウンロードできる)

そういうことをするには何が必要か分かって書いてますかね?

例えば、

(1) サーバーに IIS などの Web サーバーをインストールして、
(2) ダウンロード機能を含む ASP.NET Web アプリをそこで動かして、
(3) ブラウザからそれにアクセスしてダウンロード用のボタンを持つページをブラウザに表示して、
(4) ユーザーがそのボタンをクリックしたら ASP.NET アプリにダウンロード要求がかかって、
(5) 要求を受けた ASP.NET アプリがサーバーに置いてある YYYYMM.zip をダウンロードし、
(5) クライアントはそれを受けて保存する。

・・・と言ったことが必要です。それらを全部、一から十まで手取り足取り教えるのはここのような文章でやり取りする Q&A サイトでは無理です。

例えば (1), (2) はできているので (3) はどのようにするのかと言った質問なら話はできると思いますので、そこをよく考えて質問してください。

投稿2022/02/16 02:33

編集2022/02/16 02:36
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

DigDigBottom

2022/02/16 02:49

ご回答ありがとうございます。 おっしゃる通りで、私の質問の仕方が悪すぎました。申し訳ございません…。 (1)~(3)はわかっておりますので、今回は(4)~(6)の部分になります。 (4)もユーザがボタンをクリックしたらaspx.csの該当ボタン_クリックイベントに飛ぶので、 そこで(5)~(6)の処理をしたい、ということになります。 今のところは WebClient.DownloadFile メソッドでローカルファイルにダウンロードできるとことまでは進んでいるのですが、 張った画像のような実装がしたいのです…(ローカルファイルではなく、ブラウザのダウンロード) 書いてて思ったのですが、ローカルファイルのパスをエクスプローラーにある『ダウンロード』に指定で行けますかね…試してみます。
退会済みユーザー

退会済みユーザー

2022/02/16 03:13

> ローカルファイルのパスをエクスプローラーにある『ダウンロード』に指定で行けますかね… 開発マシン内に限ったローカルの話ならともかく、いずれは運用環境へのデプロイまで考えた Web アプリの話ですよね? であればダメです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問