繁体   English   中英

如何在MVC 5和EF6中使用FILESTREAM

[英]How to use FILESTREAM in MVC 5 and EF6

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

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

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

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

没有关于如何在实体框架中使用它的示例或提及,例如要使用的文件类型或我是否需要安装nuget。 如果我搜索FileStream的实现,我得到的是System.IO,该文件没有用于保存在数据库中的任何引用,因为它用于文件系统

我感到很困惑。 请帮忙。

SQL Server FileStream似乎是一种过度工程解决方案,仅用于将用户头像保留在您的服务器上。 您可以轻松地将化身作为文件存储在某些特定文件夹中,并在化身参考表中具有相应的记录来保留文件路径,或将化身存储为化身表中的VARBINARY字段。

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

至于其余的,我建议如下:

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/zh-cn/library/system.web.httppostedfilebase.inputstream(v=vs.110).aspx将其转换为byte[] ,然后分配字节数组到您的实体框架模型的特定模型。

请记住,通过上传文件,您应保持POST消息<= 64 KB。 在其他情况下,您将自定义应用程序配置和服务器上的IIS配置。 但是64 Kbytes应该足以实现一个avatat,不是吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM