首页 文章

MVC 4 Razor文件上传

提问于
浏览
223

我是MVC 4的新手,我正在尝试在我的网站上实现文件上传控制 . 我无法找到错误 . 我的文件中出现空值 .

控制器:

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");
        }
    }

视图:

@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" />
}

5 回答

  • 2

    Upload 方法的 HttpPostedFileBase 参数必须与 file input 具有相同的名称 .

    所以只需将输入更改为:

    <input type="file" name="file" />
    

    此外,您可以在 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");
     }
    
  • 16

    澄清它 . 模型:

    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; }
    

    发布行动

    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);
      }
    }
    

    最后用于检查hasFile的Extension方法

    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;
                }        
            }
        }
    
  • 6

    查看页面

    @using (Html.BeginForm("ActionmethodName", "ControllerName", FormMethod.Post, new { id = "formid" }))
     { 
       <input type="file" name="file" />
       <input type="submit" value="Upload" class="save" id="btnid" />
     }
    

    脚本文件

    $(document).on("click", "#btnid", function (event) {
            event.preventDefault();
            var fileOptions = {
                success: res,
                dataType: "json"
            }
            $("#formid").ajaxSubmit(fileOptions);
        });
    

    在控制器中

    [HttpPost]
        public ActionResult UploadFile(HttpPostedFileBase file)
        {
    
        }
    
  • 61

    你只需要更改输入字段的名称,因为参数和输入字段名称中需要相同的名称只需替换此行您的代码工作正常

    <input type="file" name="file" />
    
  • 293

    我认为,更好的方法是在您的控制器或API中使用HttpPostedFileBase . 在此之后,您可以简单地检测大小,类型等 .

    您可以在此处找到文件属性:

    MVC3 How to check if HttpPostedFileBase is an image

    例如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();  
    }
    

    希望它有所帮助 .

相关问题