なか日記

一度きりの人生、楽しく生きよう。

ASP.NET MVC でファイルのアップロードを行う

ファイルのアップロードってなんか面倒くさそーなイメージがあったのですが、ASP.NET MVCのモデルバインディングを使えば簡単にできるんですね。

こんな感じのサンプルを作って試してみます。

f:id:nakaji999:20140718013329p:plain

View

<h2>ファイルアップロードのサンプル</h2>

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="uploadFile" />
    <input type="submit" />
}

enctypeにmultipart/form-dataを指定するのがポイントでしょうか。 ファイル選択できるようにinput要素のtype属性にfileを指定します。

Controller

    public class HomeController : Controller
    {
        [HttpGet]
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(HttpPostedFileWrapper uploadFile)
        {
            if (uploadFile != null)
            {
                uploadFile.SaveAs(Server.MapPath("~/uploads/") + uploadFile.FileName);
            }

            return View();
        }
    }
}

POST時のメソッドの引数にHttpPostedFileWrapper型のパラメータを指定しています。アップロードされたファイルを簡単に扱えるようにカプセル化されたクラスになります。

このクラスのSaveAsメソッドを使用すればアップロードされたファイルを保存することができます。

その他 - ファイルが指定されなかった場合にはuploadFileはnullになる - Server.MapPathメソッドでURLをサーバ上のフルパス名に変換する

ひとこと

ASP.NET 便利ですね。まだまだ知らない事がたくさんあるので少しずつでも勉強していけたらと思います。

最後に、昨日ソニックガーデンの倉貫さんが呟いてたひと言。

以下、自分の思い~

何でもそうですが、技術力は実践して経験しないと身につかないと思います。なので、「手を動かすのは20台まで~」なんて話を聞くと「ええ~っ??」って思います。

IT技術者は肉体労働ではなく知的労働でしょう*1。肉体は年齢によって衰えますが、知識は年齢(経験)によってどんどん洗練されていくものだと考えてます。なので、ずっとプログラマーという職業でいても全然問題ないでしょう。

20歳の新人プログラマより、経験を積んだ40歳熟練プログラマの方が価値を提供するまでのスピードだけじゃなく、どうすればお客さんにより大きな価値を提供できるかといったビジネスの面でも数倍優れていると思います。

え、自分?自分はこの前松山であったプロ生勉強会に来られた学生さん*2より遙かにレベル低いですよ。

でも、そこで諦めたり卑屈になっても仕方ないし、人生楽しくないじゃないですか-。だから良いんです。地道に勉強して楽しみます。

*1:ITソルジャーは例外ですが

*2:名前はヒミツ