使用ASP.NET和HTML表单上传文件

cclgggtu  于 2023-01-27  发布在  .NET
关注(0)|答案(1)|浏览(172)

我正在尝试创建允许上传图像并将其存储到数据库中的功能。我在HTML表单中有以下输入字段:

@using (Html.BeginForm("AddTR", "TestCell", FormMethod.Post))
{
<div class="modal" id="NewTRModal" role="dialog" data-backdrop="static" data-keyboard="false">
  <div class="modal-dialog modal-xl" style="width:1250px;">
    <div class="modal-content">
      <div class="box5">
        <div>
          <label for="file-upload" class="custom-file-upload">
            Upload Image1
          </label>
          <input id="file-upload" type="file" name="image1"/>
        </div>
        <div>
          <div class="modal-footer">
          <button type="submit" class="btn btn-primary button button4"> Submit</button>
          <button type="button" id="btnHideModal" class="btn btn-primary button button4">Hide</button>
        </div>
      </div>
    </div>
</div>
}

我正在试着把控制器里的文件

IFormFile file = Request.Form.Files["image1"];

然而,由于某些原因,在我点击提交按钮后,Request.Form.Files为空。
我将感激任何建议。

7cjasjjr

7cjasjjr1#

仅当HTML表单元素将enctype值定义为multipart/form-data时,Web浏览器才能正确上载文件:

@using (Html.BeginForm("AddTR", "TestCell", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    ...
    <input id="file-upload" type="file" name="image1"/>
    ...
}

如果没有enctype属性,浏览器将只传输文件名,而不传输其内容。
然后,在控制器动作方法中,您可以使用与<input>标记中定义的名称相同的名称作为参数:

[HttpPost]
public ActionResult AddTR(HttpPostedFileBase image1)
{
    if (image1 != null && image1.ContentLength > 0)   
    {
        string path = Path.Combine(Server.MapPath(@"~/"), Path.GetFileName(image1.FileName));
        image1.SaveAs(path);
    }
    ...
}

如果您使用的是ASP.NET核心(您在问题中没有提到),则可以定义enctype属性,然后用途:

[HttpPost]
public IActionResult AddTR()
{
    IFormFile file = Request.Form.Files["image1"]; 
    ....
}

相关问题