【C#】FtpWebRequest を使って FTPファイル送信を試してみた
おはようございます。
大分久しぶりのC#ネタ。というか久しぶりのプログラムネタ。。
大したものじゃないですが、Windows Forms でFTPファイルの送信を試してみました。
スポンサーリンク
プロジェクト新規作成
今回は新規でプロジェクトを作成します。
Visual Studio を起動して、「ファイル」>「新規」からプロジェクトを作成してください。
画面の作成
適当に、送信するファイルパスを指定するテキストボックス、FTP情報のテキストボックス、ファイル参照ボタン、送信ボタンを配置します。
プログラム
簡単に、フォームのコードに実装していきます。
Form1.cs
using System;
using System.Windows.Forms;
using System.IO;
using System.Net;
namespace SampleFtp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
/// <summary>
/// 参照ボタンクリックイベント.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_ref_Click(object sender, EventArgs e)
{
String initialDir = @"C:";
if (String.IsNullOrEmpty(txb_target_file.Text) == false)
{
// 初期ディレクトリ
initialDir = Path.GetDirectoryName(this.txb_target_file.Text);
}
OpenFileDialog ofDialog = new OpenFileDialog();
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>
private void btn_send_Click(object sender, EventArgs e)
{
try
{
// ファイル送信
SendFile();
MessageBox.Show("ファイルを送信しました。");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
private void SendFile()
{
String fileName = Path.GetFileName(this.txb_target_file.Text);
// アップロード先のURI
Uri u = new Uri("ftp://" + txb_server_ip.Text + "/" + fileName);
// FtpWebRequestの作成
FtpWebRequest ftpReq = (FtpWebRequest)WebRequest.Create(u);
// プロキシ未使用設定
// IEでプロキシの設定をしているとデフォルトでプロキシ利用してしまうので
// 明確に使わないように null を設定しておく
ftpReq.Proxy = null;
// ログインユーザー名とパスワードを設定
ftpReq.Credentials = new NetworkCredential(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 = new FileStream(this.txb_target_file.Text, FileMode.Open, FileAccess.Read);
// アップロードStreamに書き込む
byte[] buffer = new byte[1024];
while (true)
{
int readSize = 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様
わざわざコメントありがとうございます。
ブログが参考になったとのことで、とてもうれしく思います。
引き続きよろしくお願い致します。