ASP.NET MVC でファイルをアップロードする - ASP.NET MVC

ASP.NET MVC でファイルをアップロードするコードを紹介します。

空のASP.NET MVCプロジェクトを作成します。

コントローラー・ビューの追加

コントローラーの追加

Controllerを追加します。ソリューションエクスプローラでControllerディレクトリを選択し、右クリックします。ポップアップメニューを表示されますので、メニューの[追加]を選択し、サブメニューの[コントローラー]を選択します。


[スキャフォ-ルディングを追加]ダイアログが表示されます。一覧から[MVC5 コントローラー]を選択し、ダイアログ下部の[適用]ボタンをクリックします。


[コントローラーの追加]ダイアログが表示されます。コントローラー名を"DefaultController"とします。

ビューの追加

コントローラーが作成できると、Viewsディレクトリ内に、先ほど作成した"Default"ディレクトリが作成されます。このディレクトリを選択し右クリックします。ポップアップメニューの[追加]メニューの[ビュー]をクリックします。


[ビューの追加]ダイアログが表示されます。


ビュー名を"Index"にします。


同様の処理を繰り返し、"Index"と"Upload"の2つのビューを作成します。

コード

下記のコードを記述します。
Index.cshtml
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        @using (Html.BeginForm("Upload", "Default", FormMethod.Post, new { enctype = "multipart/form-data" }))
        {
            <input type="file" name="uploadFile" />
            <input type="submit" value="アップロード" />
        }
    </div>
</body>
</html>
Upload.cshtml
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Upload</title>
</head>
<body>
    <div> 
        アップロードしました。
    </div>
</body>
</html>
DefaultController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;

namespace FileUploader.Controllers
{
  public class DefaultController : Controller
  {
    // GET: Default

    [HttpGet]
    public ActionResult Index()
    {
      return View();
    }


    [HttpPost]
    public ActionResult Upload(HttpPostedFileWrapper uploadFile)
    {
      if (uploadFile != null)
      {
        uploadFile.SaveAs(@"c:\upload-file\" + Path.GetFileName(uploadFile.FileName));
      }
      return View();
    }
  }
}
解説
Uploadメソッドの引数に、"HttpPostedFileWrapper uploadFile"を追加することで、アップロードしたファイルの情報にアクセスできます。
    public ActionResult Upload(HttpPostedFileWrapper uploadFile)


uploadFileがnullでなければ、ファイルがアップロードされたことになります。SaveAsメソッドを利用して、アップロードされたファイルを保存できます。
  if (uploadFile != null)
  {
    uploadFile.SaveAs(@"c:\upload-file\" + Path.GetFileName(uploadFile.FileName));
  }

実行結果

プロジェクトを実行します。Webブラウザが起動し、下図のページが表示されます。


[参照]ボタンをクリックします。アップロードするファイルの選択ダイアログが表示されます。


ファイルを選択します。選択後[アップロード]ボタンをクリックします。


ページが切り替わり、ファイルのアップロードが完了した旨のメッセージが表示されます。


"c:\upload-file\"ディレクトリを確認すると、ファイルがアップロードされていることが確認できました。


ASP.NET MVCでファイルのアップロードを実装できました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2018-07-28
作成日: 2015-07-27
iPentec all rights reserverd.