Je suis nouveau sur MVC 4 et j'essaie d'implémenter le contrôle de téléchargement de fichier sur mon site Web. Je ne parviens pas à trouver l'erreur. J'obtiens une valeur nulle dans mon fichier.
Manette:
public class UploadController : BaseController
{
public ActionResult UploadDocument()
{
return View();
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
return RedirectToAction("UploadDocument");
}
}
Vue:
@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" name="FileUpload" />
<input type="submit" name="Submit" id="Submit" value="Upload" />
}
Le paramètre Upload
de la méthode HttpPostedFileBase
doit avoir le même nom que le file input
.
Alors changez simplement l'entrée en ceci:
<input type="file" name="file" />
En outre, vous pouvez trouver les fichiers dans Request.Files
:
[HttpPost]
public ActionResult Upload()
{
if (Request.Files.Count > 0)
{
var file = Request.Files[0];
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/Images/"), fileName);
file.SaveAs(path);
}
}
return RedirectToAction("UploadDocument");
}
En le clarifiant. Modèle:
public class ContactUsModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public HttpPostedFileBase attachment { get; set; }
Post Action
public virtual ActionResult ContactUs(ContactUsModel Model)
{
if (Model.attachment.HasFile())
{
//save the file
//Send it as an attachment
Attachment messageAttachment = new Attachment(Model.attachment.InputStream, Model.attachment.FileName);
}
}
Enfin la méthode d'extension pour vérifier le hasFile
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace AtlanticCMS.Web.Common
{
public static class ExtensionMethods
{
public static bool HasFile(this HttpPostedFileBase file)
{
return file != null && file.ContentLength > 0;
}
}
}
Voir page
@using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" }))
{
<input type="file" name="file" />
<input type="submit" value="Upload" class="save" id="btnid" />
}
fichier de script
$(document).on("click", "#btnid", function (event) {
event.preventDefault();
var fileOptions = {
success: res,
dataType: "json"
}
$("#formid").ajaxSubmit(fileOptions);
});
Dans le contrôleur
[HttpPost]
public ActionResult UploadFile(HttpPostedFileBase file)
{
}
il vous suffit de changer le nom de votre champ de saisie car le même nom est requis dans le paramètre et le nom du champ de saisie remplace simplement cette ligne Votre code fonctionne bien
<input type="file" name="file" />
Je pense, meilleure façon est d'utiliser HttpPostedFileBase dans votre contrôleur ou API. Ensuite, vous pouvez simplement détecter la taille, le type, etc.
Les propriétés de fichier que vous pouvez trouver ici:
MVC3 Comment vérifier si HttpPostedFileBase est une image
Par exemple, ImageApi:
[HttpPost]
[Route("api/image")]
public ActionResult Index(HttpPostedFileBase file)
{
if (file != null && file.ContentLength > 0)
try
{
string path = Path.Combine(Server.MapPath("~/Images"),
Path.GetFileName(file.FileName));
file.SaveAs(path);
ViewBag.Message = "Your message for success";
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" + ex.Message.ToString();
}
else
{
ViewBag.Message = "Please select file";
}
return View();
}
J'espère que ça vous aidera.