1

MVC 4.0 プロジェクトに写真のアップロード機能を追加したいのですが、その方法を教えてください。私は MVC 4.o を使用しています。写真オプションでは、ファイル/画像をアップロードしたいと考えています。これが私のコードです

@model WebCart.Category

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm("Create", "Category", FormMethod.Post, new { enctype = "multipart/form-data" }))



{
        @Html.ValidationSummary(true)

    <fieldset>
        <legend>Category</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Title)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Title)
            @Html.ValidationMessageFor(model => model.Title)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Description)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Description)
            @Html.ValidationMessageFor(model => model.Description)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Photo)
        </div>
        <div class="editor-field">
            <input name="PhotoFile" id="File" type="file"/>
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}



    [HttpPost]
            [ValidateInput(false)]
            public ActionResult Create(Category category)
            {
                if (ModelState.IsValid)
                {
                    db.Categories.AddObject(category);
                    db.SaveChanges();
                    return RedirectToAction("Index");
                }

                return View(category);
            }
4

1 に答える 1

1

コントローラー アクションは、追加のPhotoFile引数を取ることができます。

[HttpPost]
[ValidateInput(false)]
public ActionResult Create(Category category, HttpPostedFileBase photoFile)
{
    if (ModelState.IsValid)
    {
        // you could manipulate the PhotoFile parameter here
        // for example let's store the uploaded file to a folder on the server
        if (photoFile != null && photoFile.ContentLength > 0)
        {
            var fileName = Path.GetFileName(photoFile.FileName);
            var path = Path.Combine(Server.MapPath("~/App_Data"), fileName);
            photoFile.SaveAs(path);
        }

        db.Categories.AddObject(category);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(category);
}

または、アップロードされたファイルをバイト配列として読み取りたい場合は、次を使用できます。

byte[] photo = new byte[photoFile.InputStream.Length];
photoFile.InputStream.Read(photo, 0, photo.Length);
// Now you could assign the byte array to some property of your model
// and persist it into the database (even if this is a bad practice - 
// it would be more correct to store the photo on the file system and
// only store the full path to the photo in the database)

ASP.NET MVC でファイルをアップロードするための必読の記事は次のとおりです

于 2012-12-26T14:12:11.003 に答える