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
?
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
Vous devez vous connecter pour publier un commentaire.
Ci-dessous est extrait de code, j'ai juste tapé ici pour donner une idée, vous pouvez le comprendre, si vous avez besoin de plus d'info, laissez-moi savoir
System.Web.HttpContext.Current.Request.Files
travaillé...j'ai maintenant le fichier à partir de la vue transmise à la méthodeJ'ai obtenu le nom de fichier, mais comment voulez-vous télécharger le fichier dans un dossier une fois que vous l'avez?
ok la mise à jour de la réponse à économiser de l'action
Si je pouvais upvote vous plus d'une fois je veux bien, merci!
C'est ok, je suis heureux que cela a fonctionné pour vous 🙂
OriginalL'auteur Koti Panga
La accepté de répondre à résolu le problème d'avoir le fichier vidéo à partir de la vue dans la méthode. Je suis en train de poster ce que j'ai changé dans mon code au cas où il permet à quiconque.
J'ai juste ajouté
enctype
attribut à laform
dans la VueOriginalL'auteur Jonathan Kittell