[C#] FtpWebRequest で FTP のファイルアップロード
2011-9-6 23:30 

Visual Studio 2010 の C# での FTP ファイルアップロードの実装です。
@IT とかいろいろなところに FTP のサンプルコードはあるのですが、その通りに書いても謎のシステムエラーが出るので、先にアップロードするコンテンツの長さをセットしたところうまくいっています。
private void ftpUpload(string local_file, string server_url)
{
    //server_urlは、"ftp://server_name/path/to/filename.ext" の形式
    Uri u = new Uri(server_url);
    FtpWebRequest ftp_req = (FtpWebRequest)WebRequest.Create(u);
    ftp_req.Credentials = new NetworkCredential(default_user, default_pass);
    ftp_req.Method = WebRequestMethods.Ftp.UploadFile;
    ftp_req.KeepAlive = false;
    ftp_req.UseBinary = true;
    //ftpReq.UsePassive = false;  //PASVモードを無効にする
    FileStream fs = new FileStream(local_file, FileMode.Open, FileAccess.Read);
    //転送するファイル内容のバイト配列
    byte[] bs = null;
    bs = new byte[fs.Length];
    fs.Read(bs, 0, bs.Length);
    fs.Close();
    //アップロードするコンテンツの長さをセット
    ftp_req.ContentLength = bs.Length;
    Stream reqStrm = ftp_req.GetRequestStream();
    reqStrm.Write(bs, 0, bs.Length);
    reqStrm.Close();
    FtpWebResponse response = (FtpWebResponse)ftpReq.GetResponse();
}
このサンプルコードは try~catch~finally節を省いていますし、ファイルの内容を全部メモリに読み込んでいます。
実際にそのまま用いずエラー処理や巨大なファイルの扱いなど適宜変更してみてください。
コメントはまだありません
No comments yet.
Sorry, the comment form is closed at this time.