这可能是一个愚蠢的问题,但我对使用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,它没有任何关于保存在数据库中的参考,因为它用于文件系统
我很困惑。请帮忙。
答案 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不是吗?