ASP.NET MVC 获取带有用户 ID 的文件上传名称并应用于单独的字段
Posted
技术标签:
【中文标题】ASP.NET MVC 获取带有用户 ID 的文件上传名称并应用于单独的字段【英文标题】:ASP.NET MVC Get File Upload name with user id and apply to separate field 【发布时间】:2015-04-14 22:47:57 【问题描述】:我的文件下载和上传工作正常,但我正在尝试将用户 ID 添加到文件名的开头,并将文件名应用于单独的字段。
例如:
上传文件:(UserID)_FileName.docx
文件名:(UserID)_FileName.docx
我想要这样的原因是因为我将文件上传到服务器而不是数据库,但我希望数据库记录上传文件的特定用户的文件名。
在我的控制器 Create() 中,我有这个用于上传的 sn-p
if (file != null && file.ContentLength > 0)
var fileName = User.Identity.GetUserId() + "_" + Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/UploadFiles"), fileName);
file.SaveAs(path);
在cshtml中我有以下两个字段
<div class="form-group">
@Html.Label("Upload File", new @class = "control-label col-md-2" )
<div class="col-md-10">
<input type="file" name="file" />
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.FileName, htmlAttributes: new @class = "control-label col-md-2" )
<div class="col-md-10">
@Html.TextBox("FileName", (object)ViewBag.FileName)
</div>
</div>
对于控制器中的 ViewBag.FileName 我有:
ViewBag.Resume = Path.GetFileName(file.FileName);
最后,我实际上会将 FileName 字段隐藏或仅在 POST 期间处理。所以我确信有一种不同/更好的方法来做到这一点。
【问题讨论】:
【参考方案1】:实际上是几个小时后我自己想通了。 SMH,我把它复杂化了。
在我添加的控制器中
var userName = User.Identity.GetUserName();
var userAccount = db.users.Where(m => m.Email == userName).ToList();
var userId = userAccount[0].UserID;
var fileName = userId + "_" + Path.GetFileName(file.FileName);
application.FileName = Path.GetFileName(file.FileName);
我从 cshtml 和“ViewBag.FileName = Path.GetFileName(file.FileName);”中删除了 FileName 字段来自控制器。
从 cshtml 中移除
<div class="form-group">
@Html.LabelFor(model => model.FileName, htmlAttributes: new @class = "control-label col-md-2" )
<div class="col-md-10">
@Html.TextBox("FileName", (object)ViewBag.FileName)
</div>
</div>
【讨论】:
以上是关于ASP.NET MVC 获取带有用户 ID 的文件上传名称并应用于单独的字段的主要内容,如果未能解决你的问题,请参考以下文章
需要一个带有用户反馈的 ASP.NET MVC 长时间运行的进程
带有相对路径的 ASP.Net MVC 和 RenderPartial
Jquery在asp.net mvc的html表中获取带有选中复选框的行