ASP.NET Mvc 3とMicrosoft.Web.Helpers NuGet パッケージを使用して、画像のファイル アップロードを実装しました。ファイルを参照して指定したディレクトリにアップロードできるため、実装は非常に簡単です。
ASP.NET MVC 3と Microsoft.Web.Helpers NuGetプラグインを使用したイメージ アップロード ソリューションの内容を次に示します。
今ViewModelコード
namespace MvcImageUpload.Models {
public class ImageUploadViewModel {
[UIHint("UploadedImage")]
public string ImageUrl { get; set; }
public string ImageAltText { get; set; }
}
}
コントローラーについては、これを Home コントローラーにドロップしただけです。これは、これを機能させるための単なるモック プロジェクトだからです。ActionResult
ImageUploadViewModel をパラメーターとして受け取る を追加しました。
public ActionResult Upload(ImageUploadViewModel model) {
var image = WebImage.GetImageFromRequest();
if (image != null) {
if (image.Width > 500) {
image.Resize(500, ((500 * image.Height) / image.Width));
}
var filename = Path.GetFileName(image.FileName);
image.Save(Path.Combine("../Uploads/Images", filename));
filename = Path.Combine("~/Uploads/Images", filename);
model.ImageUrl = Url.Content(filename);
model.ImageAltText = image.FileName.Substring(0, image.FileName.Length - 4);
}
return View("Index", model);
}
画像をアップロードするための私のビューは単純です。Html.BeginForm があり、Post フォーム メソッドを処理し、エンコーディング タイプが「multipart/form-data」に設定されています。
次に、Microsoft.Web.Helpers.FileUpload ヘルパーを使用して、HTTP ポストから画像を要求し、ImageViewer と呼ばれるカスタム DisplayFor テンプレートを使用して表示します。
@model MvcImageUpload.Models.ImageUploadViewModel
@using Microsoft.Web.Helpers;
@{
ViewBag.Title = "Index";
}
<h2>Image Uploader</h2>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post,
new { @encType = "multipart/form-data" })) {
@FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false,
includeFormTag: false, addText: "Add Files", uploadText: "Upload File") <br />
<input type="submit" name="submit"
value="Upload Image" text="Upload Images"
style="font-size: .9em;" />
@Html.DisplayFor(x => x, "ImageViewer")<br />
}
カスタム DisplayTemplate は次のようになります。
@model MvcImageUpload.Models.ImageUploadViewModel
@if (Model != null) {
<h4 style="color:Green;">Upload Success!</h4>
<p>
Alt Text has been set to <strong>@Model.ImageAltText</strong>
</p>
<img style="padding: 20px;"
src="@(String.IsNullOrEmpty(Model.ImageUrl) ? "" : Model.ImageUrl)"
id="uploadedImage" alt="@Model.ImageAltText"/>
}
これはすべて機能し、画像はフォーム投稿の /Uploads/Images/FileName.extension に正常にアップロードされます。
私の質問
そのディレクトリ内のすべての画像を表示し、ページングして、ビューとディレクトリから画像を選択および削除できる別のビューを作成するにはどうすればよいですか?
また、Microsoft.Web.Helpers.FileUpload が複数のファイルのアップロードをサポートしていることも知っていますが、現在のソリューションでこれを実装する方法が見つかりません。どんな助けでも大歓迎です。