【C#】FtpWebRequest を使って FTPファイル送信を試してみた
おはようございます。
大分久しぶりのC#ネタ。というか久しぶりのプログラムネタ。。
大したものじゃないですが、Windows Forms でFTPファイルの送信を試してみました。
スポンサーリンク
プロジェクト新規作成
今回は新規でプロジェクトを作成します。
Visual Studio を起動して、「ファイル」>「新規」からプロジェクトを作成してください。
画面の作成
適当に、送信するファイルパスを指定するテキストボックス、FTP情報のテキストボックス、ファイル参照ボタン、送信ボタンを配置します。
プログラム
簡単に、フォームのコードに実装していきます。
Form1.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | usingSystem; usingSystem.Windows.Forms; usingSystem.IO; usingSystem.Net; namespaceSampleFtp { publicpartial classForm1:Form { publicForm1() { InitializeComponent(); } /// <summary> /// 参照ボタンクリックイベント. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidbtn_ref_Click(objectsender,EventArgse) { StringinitialDir=@"C:"; if(String.IsNullOrEmpty(txb_target_file.Text)==false) { // 初期ディレクトリ initialDir=Path.GetDirectoryName(this.txb_target_file.Text); } OpenFileDialog ofDialog=newOpenFileDialog(); ofDialog.InitialDirectory=initialDir; ofDialog.Title="送信ファイルの指定"; //ダイアログを表示する if(ofDialog.ShowDialog()==DialogResult.OK) { this.txb_target_file.Text=ofDialog.FileName; } // オブジェクトを破棄する ofDialog.Dispose(); } /// <summary> /// 送信ボタンクリックイベント. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> privatevoidbtn_send_Click(objectsender,EventArgse) { try { // ファイル送信 SendFile(); MessageBox.Show("ファイルを送信しました。"); } catch(Exception ex) { Console.WriteLine(ex.Message); } } privatevoidSendFile() { StringfileName=Path.GetFileName(this.txb_target_file.Text); // アップロード先のURI Uriu=newUri("ftp://"+txb_server_ip.Text+"/"+fileName); // FtpWebRequestの作成 FtpWebRequest ftpReq=(FtpWebRequest)WebRequest.Create(u); // プロキシ未使用設定 // IEでプロキシの設定をしているとデフォルトでプロキシ利用してしまうので // 明確に使わないように null を設定しておく ftpReq.Proxy=null; // ログインユーザー名とパスワードを設定 ftpReq.Credentials=newNetworkCredential(txb_ftp_user.Text,txb_ftp_password.Text); // メソッドにアップロードを指定 ftpReq.Method=WebRequestMethods.Ftp.UploadFile; // 要求の完了後に接続を閉じる ftpReq.KeepAlive=false; // ASCIIモードで転送する ftpReq.UseBinary=false; // PASVモードを無効にする ftpReq.UsePassive=false; // ファイルをアップロードするためのStreamを取得 Stream reqStrm=ftpReq.GetRequestStream(); // アップロードするファイルを開く FileStream fs=newFileStream(this.txb_target_file.Text,FileMode.Open,FileAccess.Read); // アップロードStreamに書き込む byte[]buffer=newbyte[1024]; while(true) { intreadSize=fs.Read(buffer,0,buffer.Length); if(readSize==0) break; reqStrm.Write(buffer,0,readSize); } fs.Close(); reqStrm.Close(); // FtpWebResponseを取得 FtpWebResponse ftpRes=(FtpWebResponse)ftpReq.GetResponse(); // FTPサーバーから送信されたステータスを表示 Console.WriteLine("{2}: {0}: {1}",ftpRes.StatusCode,ftpRes.StatusDescription,fileName); // 閉じる ftpRes.Close(); } } } |
プロキシを設定しているとエラーとなる可能性が高いのでご注意を。
起動してみる
ファイルを指定、FTP送信先のサーバー、ユーザー、パスワードを入力して送信ボタンをクリック。
ということで、送信できました。
チェックやエラー処理など細かいことは何もしてませんので、必要に合わせて修正を。
まとめ
FTP接続はセキュリティ的によくないと言われているので、利用には十分ご注意ください。
そのうちセキュアなファイル送受信も調べてやってみようかな。
何かのお役に立てれば。
では。
ディスカッション
コメント一覧
現在社内研修を行っている駆け出しプログラマです。
ftpでのファイル転送方法を調べていたところ、このページにたどり着きました。
非常にわかりやすく参考になります。ありがとうございます。
shu様
わざわざコメントありがとうございます。
ブログが参考になったとのことで、とてもうれしく思います。
引き続きよろしくお願い致します。