Comment faire pour télécharger la vidéo en ASP.NET MVC 5 et transmettre le fichier vidéo à partir d'une vue à une méthode?

Je suis en train d'écrire un MVC 5 application web pour mettre à jour les articles du blog. Je veux être en mesure d'avoir à l'utilisateur de télécharger une vidéo au contenu du dossier et enregistrer le nom de fichier comme une chaîne de caractères dans la base de données. Cependant, il me semble manquer un élément essentiel.

J'ai une méthode pour mettre à jour les postes de travail, sauf pour la partie vidéo.

public ActionResult Update(int? id, string title, string body, DateTime dateTime, string tags, Video video)
{
    if (!IsAdmin)
    {
        return RedirectToAction("Index");
    }

    var post = GetPost(id); //get the post object

    post.Title = title;
    post.Body = body;
    post.DateTime = dateTime;
    post.Tags.Clear();
    post.VideoFileName = UploadVideo(video);

J'ai créé une classe pour la Vidéo avec une propriété.

public class Video
{
    public HttpPostedFileBase File { get; set; }
}

Puis une méthode de la même classe que le Update méthode pour télécharger la vidéo et de retourner le nom du fichier.

[HttpPost]
public string UploadVideo(Video video)
{
    if (video.File.ContentLength <= 0) return null;
    var fileName = Path.GetFileName(video.File.FileName);
    if (fileName == null) return null;
    var path = Path.Combine(Server.MapPath("~/Content/Videos"), fileName);
    video.File.SaveAs(path);

    return fileName;
}

Puis je l'ai Vue pour la méthode de mise à Jour mais je ne sais pas comment faire pour obtenir l'objet vidéo à partir de ce point de Vue dans la méthode de mise à Jour afin que je puisse les transmettre à la UploadVideo méthode.

<form action="@Href("~/Posts/Update")" method="post" id="postForm">
@if(Model.Id != -1)
{
    <input type="hidden" name="id" value="@Model.Id"/>
}
    @{ var dateTime = Model.DateTime.Year > 2000 ? Model.DateTime : DateTime.Now; }
    <input type="text" name="dateTime" value="@dateTime "/> Date<br />
    <input type="text" name="title" value="@Model.Title " /> Title<br />
    <input type="text" name="tags" value="@ViewBag.Tags " /> Tags<br />
    <textarea name="body" rows="10" cols="80">@Model.Body</textarea><br />
    <br/>
    <br/>
    <input type="file" name="video" />
    <br/>
    <br/>
    <input type="submit" name="submit" value="Submit" />
</form>

À l'aide de <input type="file" name="video" /> résultats dans l'objet vidéo est nul lorsqu'il est passé dans la méthode de mise à Jour.

Comment voulez-vous passer dans le fichier de la vidéo de la méthode de mise à Jour avec tous les autres textes de l'ensemble de données dans la Vue comme dateTime,title,tags et body?

Ajouter form attribut enctype="multipart/form-data" et vous devez capturer le fichier vidéo avec HttpContext.Current.Request.Files dans ActionResult Update()
J'ai ajouté le enctype mais comment capter le fichier vidéo à l'aide de HttpContext?
Pour une raison que j'ai eu à utiliser System.Web.HttpContext.Current.Request.Files, ça ne marcherait pas en ajoutant using System.Web en haut du fichier de classe.
Vous pouvez aller avec Request.Files, je suis en ajoutant l'extrait de code pour vous

OriginalL'auteur Jonathan Kittell | 2014-10-18