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

Asp.Net Mvc 使用用户角色编辑用户配置文件

Jquery在asp.net mvc的html表中获取带有选中复选框的行

ASP.NET MVC 如何通过 Id 从另一个模型中获取名称

如何使用带有 OAuth 令牌的 Asp.Net MVC 中的 gmail API 更快地获取日期明智的电子邮件