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

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

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

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

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

Q&A

解決済

3回答

27750閲覧

サーバーにあるファイルをダウンロードしたい

newtorino

総合スコア47

C#

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

ASP.NET

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

0グッド

0クリップ

投稿2016/04/20 08:38

編集2016/04/20 08:41

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

C#のWEBアプリを作っています。

ボタンをおしたら、サーバーにある「Clipboard01.jpg」というファイルをダウンロードするようにしたいです。
ですので、以下のコードを書きましたがダウンロードできません。
色々調べてみてもわからず困っています。
どうかアドバイスくださりますと嬉しいです。

C#

1ボタンクリックリスナー 23 //パスを取得 4 string path = GetUploadDirPath() + "/Clipboard01.jpg"; 5 6 FileInfo file_data = new FileInfo(path); 7 8 //ファイルに書き込むためのFileStreamを作成 9 FileStream fs = file_data.OpenRead(); ; 10 fs.Close(); 11

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

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

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

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

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

guest

回答3

0

ベストアンサー

ダウンロードなので、レスポンスのストリームに書き込まないといけないんじゃないでしょうか?

C#

1Response.WriteFile(path, false)

のような感じでできないですか?

投稿2016/04/20 09:06

root_jp

総合スコア4666

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

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

newtorino

2016/04/21 04:40

ご回答ありがとうございます。 Response.WriteFileで実装することができました。 このままですと文字化けしてしまうので http://d.hatena.ne.jp/tekk/20110221/1298295862 こちらのサイトと合わせて挑戦してみたらできました。 ありがとうございます! 質問には記載していなくて申し訳ないですが、今回は DL先の指定なしでDLしたかったのでrootさんの回答をベストアンサーにさせていただきたいと思います。 ありがとうございました!
guest

0

こんにちは。
僕も初心者なので間違っているかもしれませんが、

・ローカルのファイル (例: c:\Clipboard01.jpg )

・WEB上のファイル ( 例: http://www.yahoo.co.jp/Clipboard01.jpg )

ではファイルを読み込む(ダウンロードする)処理の仕方が違うのですが、

ローカルファイルの書き方をしていらっしゃいませんか?

WEB上のファイルをダウンロードする方法で

簡単なのは、

C#

1System.Net.WebClient wc = new System.Net.WebClient(); 2wc.DownloadFile(path, @"c:\test\Clipboard01.jpg"); 3// ↑path がダウンロードするurlを含めたファイル名 で 第2引数が保存ファイル名 4wc.Dispose();

出典:ファイルをダウンロードし保存する
[http://dobon.net/vb/dotnet/internet/downloadfile.html

](http://dobon.net/vb/dotnet/internet/downloadfile.html)

.
細かいことをしたい場合には、

C#

1//ダウンロードするファイル 2string url = "http://www.xxx.co.jp/Clipboard01.jpg"; 3//保存先のファイル名 4string fileName = @"C:\test\Clipboard01.jpg"; 5 6//WebRequestを作成 7System.Net.HttpWebRequest webreq = 8 (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url); 9 10//サーバーからの応答を受信するためのWebResponseを取得 11System.Net.HttpWebResponse webres = 12 (System.Net.HttpWebResponse)webreq.GetResponse(); 13 14//応答データを受信するためのStreamを取得 15System.IO.Stream strm = webres.GetResponseStream(); 16 17//ファイルに書き込むためのFileStreamを作成 18System.IO.FileStream fs = new System.IO.FileStream( 19 fileName, System.IO.FileMode.Create, System.IO.FileAccess.Write); 20 21//応答データをファイルに書き込む 22byte[] readData = new byte[1024]; 23for (; ; ) 24{ 25 //データを読み込む 26 int readSize = strm.Read(readData, 0, readData.Length); 27 if (readSize == 0) 28 { 29 //すべてのデータを読み込んだ時 30 break; 31 } 32 //読み込んだデータをファイルに書き込む 33 fs.Write(readData, 0, readSize); 34} 35 36//閉じる 37fs.Close(); 38strm.Close()

出典:WebRequest、WebResponseクラスを使ってファイルをダウンロードし保存する
http://dobon.net/vb/dotnet/internet/webrequestsavefile.html

なんかがあります。

的外れだったらスミマセン、、、

投稿2016/04/20 13:57

編集2016/04/20 14:02
occhan

総合スコア19

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

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

newtorino

2016/04/21 04:43

ご回答ありがとうございます! 簡単な実装方法としてはWebClientがいいみたいですね。 保存先を指定したいときに今後つかっていきたいと思います。 ありがとうございます! FileStreamのほうは何度か挑戦してみましたが アクセス拒否等いろいろ引っかかってしまって実装方法がわかりませんでした。 すいません・・・。
guest

0

すみません

勘違いしてました

投稿2016/04/20 08:58

編集2016/04/20 09:01
dojikko

総合スコア3939

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

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

newtorino

2016/04/21 04:38

ご回答ありがとうございます! dojikkoさんが最初に描いていただいたWebClienでもちゃんとDLできましたよ! パスからでもURLからでも可能でした。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問