如何在MVC 5和EF6

时间:2015-12-15 09:30:06

标签: c# sql-server asp.net-mvc-5

这可能是一个愚蠢的问题,但我对使用FileStream感到困惑。

起初我以为FileStream只是一个用于读取和保存文件的System.IO实现,但也有用于MSSQL或数据库存储的FILESTREAM。

https://msdn.microsoft.com/en-us/library/bb933993%28v=sql.100%29.aspx

我的问题是我想在我的应用程序上实现FILESTREAM,因为我只是要存储profilepictures但我没有得到的是实现部分。

没有关于如何在Entity Framework中使用它的示例或提及,例如要使用的Filetype或我需要安装nuget。如果我搜索FileStream的实现,我得到的是System.IO,它没有任何关于保存在数据库中的参考,因为它用于文件系统

我很困惑。请帮忙。

1 个答案:

答案 0 :(得分:0)

看起来SQL Server FileStream是一个过度工程的解决方案,只是将用户头像保存在你的服务器上。您可以轻松地将服务器上的头像存储在某个特定文件夹中的文件中,并在头像参考表中保留文件路径中的相应记录,或将头像存储为头像表中的VARBINARY字段。

将头像存储为文件在我看来是一个更直接的解决方案,因为稍后您可以在某些<img/>中添加文件的URL以显示头像。

至于其余部分,我建议如下:

1)在你的MVC视图中,请提供类似的模型

public class AvatarModel
{
    public int UserId { get; set; }
    public HttpPostedFileBase AvatarFile { get; set; }
}

2)使用以下声明开始您的头像视图

 using (
    Html.BeginForm("Avatar", "UserManagement", FormMethod.Post, FormMethod.Post, new { enctype = "multipart/form-data" } )
    ) 

3)在视图中定义输入和提交按钮

<input type="hidden" id="UserId" value="@Model.UserId" />
<input type="file" id="AvatarFile" />

<button type="submit"/>

4)在UserManagement控制器中实现以下方法

[HttpPost]
[ActionName("Avatar")]
public ActionResult AvatarPost(AvatarModel model)
{
...
}

5)在方法体中,您将通过model参数访问文件 model.AvatarFile。对象model.AvatarFile为您提供了两种可能性:保存为文件https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase.saveas(v=vs.110).aspx,或者您可以将文件作为流https://msdn.microsoft.com/en-us/library/system.web.httppostedfilebase.inputstream(v=vs.110).aspx将其转换为byte[],然后分配字节数组到您的实体框架模型的特定模型。

请记住,通过上传文件,您应该保留POST消息&lt; = 64 Kbytes。在其他情况下,您将自定义应用程序配置和服务器上的IIS配置。 但64瓦应该用于avatat不是吗?