查看:
@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.pdf
和 file-EpNewbie.pdf
) 如果 2 个用户同时上传不同的文件,这些文件可能会被覆盖。您的设计和命名约定似乎存在问题,但在我的回答中,我说明了如何将文件输入的名称传递给 Controller 操作,该操作可用于构建生成的文件名。现在,您需要在构建实际应用程序时考虑这一点。
关于asp.net-mvc - 在mvc中根据其输入类型的属性(id)重命名上传的文件asp.net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17898460/