无法上传图片

时间:2018-10-17 20:10:02

标签: asp.net asp.net-core

我正在尝试将图像更新到数据库,我将以下内容定义为属性模型(受数据库限制):

public byte[] AvatarImage { get; set; }

然后,我创建了另一个将值存储在ViewModel中的属性:

public IFormFile AvatarImage { get; set; }

此步骤在文档here中也有描述。 在我的表格旁边,我添加了以下html:

<div class="form-group text-center col-lg-12">                                                        
    <img src="@Model.AvatarImage" class="avatar img-circle" alt="avatar" />
   <h6>@Localizer["UploadNewAvatar"] ...</h6>                                        
   <input type="file" class="form-control" id="avatarUrl" asp-for="@Model.AvatarImages" />
</div>

当我提交表单时,属性AvatarImage甚至是null。但是我不明白为什么会发生这种情况,因为所有其他表单属性都正确地计价了

3 个答案:

答案 0 :(得分:1)

听起来像您缺少表单enctype。

确保您拥有:

<form enctype="multipart/form-data">
 ... inputs
<form>

答案 1 :(得分:0)

您下面的<input type="file">元素分配似乎是错误的,因为它使用了@Model指令,该指令输出AvatarImages属性的值(并且该属性在viewmodel类中不存在):

<input type="file" class="form-control" id="avatarUrl" asp-for="@Model.AvatarImages" />

正确的方法只是使用下面的示例中的属性名称,因为asp-for="PropertyName"等效于HTML帮助器中的model => model.PropertyName(假设您将@model指令设置为viewmodel类):

<input type="file" class="form-control" asp-for="AvatarImage" />

也不要忘记在enctype="multipart/form-data"标签助手中指定<form>属性:

<form asp-controller="ControllerName" asp-action="ActionName" method="post" enctype="multipart/form-data">
    <!-- form contents here -->
</form>

参考:Tag Helpers in forms in ASP.NET Core

答案 2 :(得分:0)

首先将enctype =“ multipart / form-data”添加到表格中;

然后,检查您的@model,两种情况:

1。直接使用Model,因为图像是字节数组类型,所以在提交过程中需要将文件类型转换为byte []。

2。或者您可以使用ViewModel,然后在方法中将参数类型更改为viewmodel。