• ASP.NET MVC中使用表单上传文件时的注意事项


    最近了好久没写ASP.NET 使用HTML的FORM来上传文件了,结果写了个文件上传发现ASP.NET MVC的Controller中老是读取不到上传的文件。

    MVC的View(Index.cshtml)如下所示:

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    <form action="@Url.Action("Upload")" method="post" >
        <input name="filedata" type="file" value="浏览" /><br />
        <input type="submit" value="提交" />
    </form>

    HomeController中读取文件的Action如下所示:

    public ActionResult Upload()
    {
        string folder = @"C:inetpubwwwrootUpload";
        var filePath = folder+"\"+Request.Files["filedata"].FileName.Substring(Request.Files["filedata"].FileName.LastIndexOf("\")+1);
                
        if(System.IO.File.Exists(filePath))
        {
            System.IO.File.Delete(filePath);
        }
    
        Request.Files["filedata"].SaveAs(filePath);
    
        return View("Index");
    }

    结果上面代码中的Request.Files["filedata"]始终报错,Request.Files.Count也始终为0。

    我就纳闷了这明明FORM表单中有一个input为file的组件,为什么http请求post到服务器端后,什么都没读到?

    后来经过网上搜索发现,原来如果FORM表单要上传文件必须得加上属性enctype="multipart/form-data"才行。所以将MVC的View(Index.cshtml)改为如下代码:

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    <form action="@Url.Action("Upload")" method="post" enctype="multipart/form-data">
        <input name="filedata" type="file" value="浏览" /><br />
        <input type="submit" value="提交" />
    </form>

    这一次Request.Files["filedata"]终于读到文件了,Request.Files.Count也为1了。

    所以请记住在ASP.NET中如果要使用HTML表单上传文件,有两个需要注意的地方:

    1. FORM标签的method为post,并且要加上enctype="multipart/form-data"这个属性值
    2. input file这个组件必须要有属性name,比如在我们这个例子中我们将input file标签的name定义为了filedata,这样我们在ASP.NET的服务器端才能用Request.Files["filedata"]读取到上传的文件。我试了下如果input file不定义name属性,Request.Files.Count也为0,说明ASP.NET完全会忽略不带name属性的input file标签
  • 相关阅读:
    每天一个linux命令(21):chgrp,chown,chmod
    设计模式之单例模式
    每天一个linux命令(20):find命令之exec
    每天一个linux命令(19):find 命令概览
    每天一个linux命令(18):locate 命令
    每天一个linux命令(17):whereis 命令
    【6折抢】戴尔i7新品Latitude高性能商用本
    Spring Cloud Gateway VS Zuul 比较,怎么选择?
    Zookeeper怎么实现分布式锁?
    数据库怎么分库分表,垂直?水平?
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/9224684.html
Copyright © 2020-2023  润新知