asp.net-mvc - 在mvc中根据其输入类型的属性(id)重命名上传的文件asp.net

标签 asp.net-mvc asp.net-mvc-4

查看:

 @using (Html.BeginForm("Edit","program","",FormMethod.Post,new {enctype = "multipart/form-data"}))
 {

   <div class="upload">

     <input type="file" name="files" id="EpExpert"/>
     <input type="file" name="files" id="EpNewbie"/>
     <input type="submit" name="submit" value="submit" id="submit"/>
   </div>

 }

Controller :

[HttpPost]

public ActionResult Edit(tr_program program, IEnumerable<HttpPostedFileBase> files)
{
  foreach (var file in files)
  {
            if (file != null)
    {
      //string extension = Path.GetExtension(file.FileName);
      string path = AppDomain.CurrentDomain.BaseDirectory + "Documents/Program-PDFs/";
      string filename = Path.GetFileName(file.FileName);
      file.SaveAs(Path.Combine(path, filename));
    }
  }
}

上传的文件名应为file-{id}.pdf

例如:文件-EpNewbie.pdf

file-EpExpert.pdf

请帮忙!!

最佳答案

id 永远不会发送到服务器。您可以改用 name 属性:

@using (Html.BeginForm("Edit", "program", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="upload">
        <input type="file" name="EpExpert" />
        <input type="file" name="EpNewbie" />
        <input type="submit" name="submit" value="submit" id="submit"/>
    </div>
}

并在您的 Controller 操作中:

[HttpPost]
public ActionResult Edit(tr_program program)
{
    string location = Server.MapPath("~/Documents/Program-PDFs");
    foreach (string name in Request.Files)
    {
        HttpPostedFileBase file = Request.Files[name];
        string filename = string.Format("file-{0}.pdf", name);
        filename = Path.Combine(location, filename);
        file.SaveAs(filename);
    }

    ...
}

显然,因为您将所有文件存储在同一位置 (~/Documents/Program-PDFs),且具有相同的名称 (file-EpExpert.pdffile-EpNewbie.pdf) 如果 2 个用户同时上传不同的文件,这些文件可能会被覆盖。您的设计和命名约定似乎存在问题,但在我的回答中,我说明了如何将文件输入的名称传递给 Controller ​​操作,该操作可用于构建生成的文件名。现在,您需要在构建实际应用程序时考虑这一点。

关于asp.net-mvc - 在mvc中根据其输入类型的属性(id)重命名上传的文件asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898460/

相关文章:

javascript - 使用 weyland 缩小 durandal mvc 4 项目不会导出缩小的 main-debug.js

asp.net-mvc - ASP.NET MVC Controller 单元测试令人困惑

c# - 使用自定义功能覆盖 MVC 模型显示名称注释

c# - 提交表单时的 ASP.NET MVC 部分 View 问题

javascript - MVC 4 将值从 Javascript 传递到 Controller

asp.net-mvc-4 - 将点击事件添加到 MVC Razor 中的按钮

c# - 将 ActionResult 呈现为字符串 - 输出顺序不正确

asp.net - HttpContext.User.Identity 为空

c# - NHibernate 问题与每个请求的 session MVC 应用程序

javascript - 从 url 中的两个相同单词中删除一个单词