ASP.NET MVC 文件上传

3

目前,我有一个ASP.NET MVC项目,使用数据库先定义表,表可以输入字母数字,但我认为添加文件上传功能会更好,这样可以将图片插入到数据库中,因此我在SQL Server中创建了一个带有ID字段和图像字段的表,数据类型为image。

当我添加此模型并根据该模型创建控制器和视图时,它不会为该字段创建标签或编辑器,我使用DataAnnotations为其赋予了DataType upload属性,但我找不到实际上传文件的方法。我尝试过以下内容,对于普通输入有效,但没有任何显示,是否可以使用 @HTML.FileUploadFor(model => model.Vehicle) 或类似的东西。

这是我尝试过的内容:

<div class="editor-label">
    @Html.LabelFor(model => model.Vehicle)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Vehicle)
    @Html.ValidationMessageFor(model => model.Vehicle)
</div>

这是我的模型。
public partial class VehicleImage
{
    public int Vehicle_ID { get; set; }
    [DataType(DataType.Upload)]
    public byte[] Vehicle { get; set; }
}
3个回答

3

有很多方法可以实现这个功能。

我通常使用一个叫做Uploadify的jquery插件。

请看这篇文章 - https://stackoverflow.com/a/17520062/1581026

另一种方法是在您的表单视图中添加以下内容:

<input type="file" name="Picture" />

您的表单元素需要像下面这样:
 @using ( Html.BeginForm( "ACTION", "CONTROLLER", FormMethod.Post, new { enctype = "multipart/form-data" }))

然后在传递给POST操作的模型中,您可以添加一个属性:
public HttpPostedFileBase Picture {get; set; }

或者您也可以将其作为参数添加到您的POST行动中:

[HttpPost]
Public ActionResult SomeAction(HttpPostedFileBase Picture, .....)

干杯,这里的“Picture”是我要上传到其中的数据库字段的名称吗? - Crouch
不,"Picture" 将是您的模型中的属性。 您不能直接将其保存到数据库中。 您首先必须将其转换为字节数组。 - Jeandre Pentz
抱歉,我忘记了你还需要添加encype = multipart/form-data,就像Ajay Punekar的帖子中所述 - https://dev59.com/e3vZa4cB1Zd3GeqP-g4N#20996333。我也在我的帖子中添加了它。 - Jeandre Pentz
我一直收到这个错误:输入不是有效的Base-64字符串,因为它包含一个非Base-64字符、超过两个填充字符或填充字符中有一个非法字符。 - Crouch
当我尝试将其保存到数据库时 - Crouch

3
据我所知,目前没有标准的文件控件或辅助工具。 不过这里有一个很好的教程,可以帮你实现你想要的功能。

http://haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx/

此外,如果您真的需要这个功能,您可以自己编写一个html helper来实现。
1. 编写HtmlHelper对象的扩展方法 2. 在视图中声明一个代码块,例如:
@helper MyHelper(string id){ }

谢谢,我会研究一下。 - Crouch

0
尝试像这样做:
创建这种类型的视图
    using (Html.BeginForm("FileUpload", "FileUpload", 
                FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
      <input name="uploadFile" type="file" />
      <input type="submit" value="Upload File" />
    }

这里是控制器方法

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
}

请参考此链接:http://www.codeproject.com/Articles/38970/Implementing-HTTP-File-Upload-with-ASP-NET-MVC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接