VisualStudio .net ロリポップにFTPアップロード

ロリポップにファイルアップロード

アプリケーションで、ファイルを選択して、ロリポップのレンタルサーバにアップロードする時のコードです。

コードは、基本的にdobon.netさんを参考にしています。

画面構成はこんな感じ

ファイルを選択して

ファイルをアップロードします

ファイル選択のコード

//はじめのファイル名を指定する
//はじめに「ファイル名」で表示される文字列を指定する
ofd.FileName = "movie.mp4";
//はじめに表示されるフォルダを指定する
//指定しない(空の文字列)の時は、現在のディレクトリが表示される
ofd.InitialDirectory = @"C:\";
//[ファイルの種類]に表示される選択肢を指定する
//指定しないとすべてのファイルが表示される
ofd.Filter = "mp4ファイル(*.mp4)|*.mp4;|すべてのファイル(*.*)|*.*";
//[ファイルの種類]ではじめに選択されるものを指定する
//2番目の「すべてのファイル」が選択されているようにする
ofd.FilterIndex = 1;
//タイトルを設定する
ofd.Title = "開くファイルを選択してください";
//ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
ofd.RestoreDirectory = true;
//存在しないファイルの名前が指定されたとき警告を表示する
//デフォルトでTrueなので指定する必要はない
ofd.CheckFileExists = true;
//存在しないパスが指定されたとき警告を表示する
//デフォルトでTrueなので指定する必要はない
ofd.CheckPathExists = true;


//ダイアログを表示する
if (ofd.ShowDialog() == DialogResult.OK)
{
    //OKボタンがクリックされたとき、選択されたファイル名を表示する
    l_FileSelect.Text = ofd.FileName;
}

 

FTPアップロードコード

//OpenFileDialogクラスのインスタンスを作成
OpenFileDialog ofd = new OpenFileDialog();
private void b_Upload_Click(object sender, EventArgs e)
{
    if (MessageBox.Show(ofd.FileName + "をアップロードします", "アップロード確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) != DialogResult.OK)
    {
        return;
    }
    //アップロードするファイル
    string upFile = ofd.FileName;
    //アップロード先のURI
    Uri u = new Uri("ftp://ftp.lolipop.jp/videos/test.mp4");

    //FtpWebRequestの作成
    System.Net.FtpWebRequest ftpReq = (System.Net.FtpWebRequest)
        System.Net.WebRequest.Create(u);
    //ログインユーザー名とパスワードを設定
    ftpReq.Credentials = new System.Net.NetworkCredential("ユーザ名", "ぱっすワード");
    //MethodにWebRequestMethods.Ftp.UploadFile("STOR")を設定
    ftpReq.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
    //要求の完了後に接続を閉じる
    ftpReq.KeepAlive = false;
    //ASCIIモードで転送する
    ftpReq.UseBinary = false;
    //PASVモードを有効 ← これやらないとうまくアップロードできない
    ftpReq.UsePassive = true;

    //ファイルをアップロードするためのStreamを取得
    System.IO.Stream reqStrm = ftpReq.GetRequestStream();
    //アップロードするファイルを開く
    System.IO.FileStream fs = new System.IO.FileStream(
        upFile, System.IO.FileMode.Open, System.IO.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を取得
    System.Net.FtpWebResponse ftpRes =
        (System.Net.FtpWebResponse)ftpReq.GetResponse();
    //FTPサーバーから送信されたステータスを表示
    MessageBox.Show(ftpRes.StatusCode + ":" + ftpRes.StatusDescription);

    //閉じる
    ftpRes.Close();
}