【问题标题】:MVC ASP.net file upload : filepath is empty after submitMVC ASP.net 文件上传:提交后文件路径为空
【发布时间】:2012-07-15 10:18:23
【问题描述】:

我有这个 HTML

<% using (Html.BeginForm("Upload", "BulkUpload", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
    <%: Html.TextBoxFor(model => model.UploadFile, new { @type = "file" }) %>
    <%: Html.ValidationMessageFor(model => model.UploadFile, "*") %>
    <%= Html.Button("submit", "Upload", null) %>
<% } %>

还有这个模型

public class BulkUploadVM
{
    [DisplayName("File to import")]
    public HttpPostedFileBase UploadFile { get; set; }
}

还有这个控制器

[HttpPost]
public ActionResult Upload(BulkUploadVM model)
{
    if (ModelState.IsValid)
    {
        var stream = model.UploadFile.InputStream;

        // Process stream ...
    }

    return View("Index", model);
}

上传文件已正确发布到Controller,但是当Controller返回带有模型的视图(具有有效的UploadFile)时,页面上的文件路径为空?
这是默认行为吗?还是我错过了什么?

【问题讨论】:

  • 您希望文件路径是什么?
  • 我使用“浏览”按钮输入/选择的相同文件路径。
  • 该值对服务器不可用,因此无法在转发时设置。
  • @Oded : model.UploadFile.FileName 见msdn.microsoft.com/en-us/library/…
  • 出于安全原因,大多数浏览器提供此信息。

标签: asp.net-mvc file-upload httppostedfilebase


【解决方案1】:

正如 Oded 所述,出于安全原因,无法从文件上传输入元素中设置值。

请参阅 RFC 1867this link
文件输入类型创建一个字段,用户可以通过该字段从本地计算机或网络上传文件。 VALUE 属性指定初始文件的名称,但作为安全预防措施,浏览器通常会忽略它。

【讨论】:

    【解决方案2】:
    <% using (Html.BeginForm("Upload", "Home", new { BulkUploadVM = Model }, 
                   FormMethod.Post,   new { enctype = "multipart/form-data" })) { %>
    
        <%= Html.TextBoxFor(model => model.UploadFile, new { @type = "file" }) %>
        <%= Html.ValidationMessageFor(model => model.UploadFile, "*") %>
    
        <input type="submit" value="Finish" />
    
        <% } %>
    

    设置 routeValues 对象

    new { BulkUploadVM = Model }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-14
      • 2016-08-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多