MVC4 C# - Souhaitez enregistrer une image dans un dossier et d'enregistrement de l'url dans la base de données

Je suis assez nouveau avec MVC4 de codage. Ont été de la programmation dans SharePoint avant.

Le problème que j'ai c'est que je veux enregistrer une image dans un dossier spécifique (disons App_Data) et aussi d'enregistrer l'url de l'image d'une chaîne de caractères dans une base de données.
Ce serait génial si quelqu'un pouvait m'aider avec ce problème.

Le code que j'ai en ce moment est.

Modèles > ImageUpload.cs

public class ImageUpload

{
    public int ID { get; set; }
    public string Title { get; set; } 
    public string Url { get; set; }
}

public class ImageUploadDBContext : DbContext
{
    public DbSet<ImageUpload> ImageUploads { get; set; }
}

Contrôleurs > ImageUploadController.cs

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(ImageUpload imageupload)
    {
        if (ModelState.IsValid)
        {
            db.ImageUploads.Add(imageupload);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(imageupload);
    }

[HttpPost]
    public ActionResult Upload(HttpPostedFileBase[] files)
    {
        foreach (HttpPostedFileBase file in files)
        {
            string picture = Path.GetFileName(file.FileName);
            string path = Path.Combine(Server.MapPath("~/App_Data"), picture);
            string[] paths = path.Split('.');
            string time = DateTime.UtcNow.ToString();
            time = time.Replace(" ", "-");
            time = time.Replace(":", "-"); 
            file.SaveAs(paths[0] + "-" + time + ".jpg");
        }
        ViewBag.Message = "File(s) uploaded successfully";
        return RedirectToAction("Index");
    }

View > ImageUpload > Index.cshtml

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Url)
        </th>
        <th>
            Preview
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Url)
            </td>
            <td>
                <img border="0" src="@Html.DisplayFor(modelItem => item.Url)" alt="@Html.DisplayFor(modelItem => item.Title)">
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
                @Html.ActionLink("Details", "Details", new { id=item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.ID })
            </td>
        </tr>    
    }
</table>

View > ImageUpload > Créer.cshtml

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>ImageUpload</legend>

            @using (Html.BeginForm())
            {
                    <div class="editor-label">
                        <b>@Html.LabelFor(Model => Model.Title)</b>
                    </div>
                    <div class="editor-field">
                        @Html.EditorFor(Model => Model.Title)
                        @Html.ValidationMessageFor(Model => Model.Title)
                    </div>
                    <div class="editor-label">
                        <b>@Html.LabelFor(Model => Model.Url)</b>
                    </div>
                    <div>
                        @Html.EditorFor(Model => Model.Url)
                        <input type="file" name="files" value="" multiple="multiple"/>
                    </div>
                    <div>
                        <input type="submit" value="Submit" />
                    </div>
            }


    </fieldset>
}

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

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
  • Je n'aurais pas pris la peine de sauver l'image de la App_Data dossier que si vous êtes le stockage de l'url, il ne sera pas accessible via le web.
  • Pourquoi avez-vous séparé de Créer et de méthodes de Téléchargement quand il semble qu'il peut faire la même chose en une seule fois?
  • le stockage de l'image binaire en DB est une meilleure option..
InformationsquelleAutor LiveOskar | 2013-05-07