none
ASP.NET 5 上传文件 RRS feed

  • 问题

  • 以前是用:HttpPostedFileBase

    那么现在用什么呢?

    --------------------------------------------

    请原谅我的无知---

    2015年7月26日 12:15

答案

  • 你好,

    在MVC 5之前的版本中上传文件,有两种方式:

    1. 直接对Request.Files进行访问获取HttpPostedFileBase。
    2. 通过模型绑定获取HttpPostedFileBase。

    在MVC 6中同样也是有两种方式,只是提供的类和之前有所不同,没有HttpPostedFileBase,取而代之的是IFormFile,且额外的一些文件信息放到了ContentDispositionHeaderValue。

    1.直接使用Request.Form.Files访问IFormFile。

    [HttpPost]
    public ActionResult Upload()
    {
        string path = @"D:\Temp\";
    
        IFormFile photo = Request.Form.Files["photo"];
    
        if (photo != null)
        {
            var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);
            var originalName = parsedContentDisposition.FileName.Replace("\"", "");
            photo.SaveAs(path + originalName);
        }
    
        return RedirectToAction("Index");
    }

    2.通过模型绑定获取IFormFile

    [HttpPost]
    public ActionResult Upload(IFormFile photo)
    {
        string path = @"D:\Temp\";
    
        if (photo != null)
        {
            var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);
            var originalName = parsedContentDisposition.FileName.Replace("\"", "");
            photo.SaveAs(path + originalName);
        }
    
        return RedirectToAction("Index");
    }

    更详细的信息,请参考这篇博客:

    http://www.cnblogs.com/redmoon/p/4601133.html

    http://www.bubuko.com/infodetail-941778.html

    • 已标记为答案 李化贝 2015年7月30日 9:00
    2015年7月29日 11:08
    版主

全部回复

  • 还是一样的用HttpPostedFileBase

    普通用法

                    if (Request.Files.Count > 0)
                    {
                        foreach (string f in Request.Files.AllKeys)
                        {
                            HttpPostedFileBase file = Request.Files[f];
                            string filePath = this.Server.MapPath("/UploadDoc/") + file.FileName;
                            file.SaveAs(filePath);
                        }
                        return "Success";
                    }

    MVC用法

    public ActionResult Upload(HttpPostedFileBase fileField)
    {
       if (fileField != null)
                    {
                        //....
                    }
    }

    2015年7月27日 7:22
  • 但是他们都是 System.Web namespace 下的吧?

    而Syetem.Web无法再DNX 5.0下工作

    2015年7月27日 7:59
  • 你好,

    在MVC 5之前的版本中上传文件,有两种方式:

    1. 直接对Request.Files进行访问获取HttpPostedFileBase。
    2. 通过模型绑定获取HttpPostedFileBase。

    在MVC 6中同样也是有两种方式,只是提供的类和之前有所不同,没有HttpPostedFileBase,取而代之的是IFormFile,且额外的一些文件信息放到了ContentDispositionHeaderValue。

    1.直接使用Request.Form.Files访问IFormFile。

    [HttpPost]
    public ActionResult Upload()
    {
        string path = @"D:\Temp\";
    
        IFormFile photo = Request.Form.Files["photo"];
    
        if (photo != null)
        {
            var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);
            var originalName = parsedContentDisposition.FileName.Replace("\"", "");
            photo.SaveAs(path + originalName);
        }
    
        return RedirectToAction("Index");
    }

    2.通过模型绑定获取IFormFile

    [HttpPost]
    public ActionResult Upload(IFormFile photo)
    {
        string path = @"D:\Temp\";
    
        if (photo != null)
        {
            var parsedContentDisposition = ContentDispositionHeaderValue.Parse(photo.ContentDisposition);
            var originalName = parsedContentDisposition.FileName.Replace("\"", "");
            photo.SaveAs(path + originalName);
        }
    
        return RedirectToAction("Index");
    }

    更详细的信息,请参考这篇博客:

    http://www.cnblogs.com/redmoon/p/4601133.html

    http://www.bubuko.com/infodetail-941778.html

    • 已标记为答案 李化贝 2015年7月30日 9:00
    2015年7月29日 11:08
    版主
  • ok , thanks

    我想我也找到了一篇文章

    http://www.lilonghe.net/index.php/asp-net-5-beta/

    2015年7月30日 9:00