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

时间:2013-07-27 13:41:11

标签: 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>

 }

控制器:

[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

例如:file-EpNewbie.pdf

file-EpExpert.pdf

请帮助!!

2 个答案:

答案 0 :(得分:2)

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>
}

并在您的控制器操作中:

[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),则两个用户同时上传不同的文件可能会被覆盖。您的设计和命名约定似乎有问题,但在我的回答中,我说明了如何将文件输入的名称传递给控制器​​操作,该操作可用于构建生成的文件名。现在,您需要在构建实际应用程序时考虑到这一点。

答案 1 :(得分:0)

你可以从这里了解一下。首先声明iddata-id动态。例如

id = '@model.Id'   data-id = '@model.Id'

在提交表单之前,使用js或jquery获取id值,然后发布表单。

$("#myForm").submit(function () {
        var idValue = $(this).attr('data-id');
        document.getElementById('yourHiddenValue').value = idValue;
});