4

我有一些简单的实体,现在需要一个个人资料图像。这样做的正确方法是什么?因此,这是一对一的关系,一张图像仅与一个实体相关,反之亦然。此图像应通过网络表单上传,并插入相关实体。

因此,正如我被指出使用文件系统来存储图像并仅将路径图像持久保存到数据库中时,我不得不询问是否有人提供任何教程或链接,或代码示例。

谢谢

4

4 回答 4

3

我使用实体框架将图像源本身保存到数据库中,并确保在数据库中包含以下内容:

  • 创建日期
  • 文件类型(内容类型)
  • 源(二进制)
  • 文件名
  • 文件大小
  • 高度
  • 宽度

我使用字节流/BinaryReaders 加载它。我的代码在这里:

http://garfbradazweb.wordpress.com/2011/08/16/mvc-3-upload-sql-server-entity-framework/

完整的教程系列在这里: http: //garfbradazweb.wordpress.com/welcome-to-my-ancedotes/#

在关系方面,我有以下几点:

媒体表- 存储所有图像并包括上述列。您可能需要与其他表格相关的图像。关键是 C# 类型为 Guid 的 uniquieid (SQL)。

个人资料表- 存储我的用户个人资料。在这里,我有一个 ImageId,它是配置文件行和图像之间的一对一关系。

我已经编写了一个 MVCImage 应用程序,它向您展示了如何在这里使用它:

http://mvcimage.codeplex.com/ 让我知道这是否可行或者您是否需要代码示例。

于 2012-06-08T10:14:20.013 回答
3

使用图像创建实体应执行的步骤。

  1. 创建带有图像上传的 asp 表单并为实体收集数据。理想情况下,如果您分两步进行,即第一个图像上传。
  2. 在提交帖子图像(也许你必须为大图像配置一些东西)和实体数据
  3. 在后端检查图像。如果可以,请存储在文件夹中。
  4. 如果图像正常,则在数据库中创建实体。实体图像路径应从步骤 3 中的数据更新。

一些建议:

  • 防守代码。
  • 在上传图像时检查图像是否有效(甚至对图像头进行二进制检查)
  • 等到图像上传并检查以创建实体。
  • 在插入新实体的情况下,不允许覆盖现有图像。
  • 将图像命名为主键(1.jpg、2.jpg)
  • 在加载图像时不要假设图像会在那里。
  • 不允许(如果可能)与图像进行手动交互(禁止在机器中远程处理并将图像从一个地方复制到另一个地方)。手动交互可能会导致不一致。
于 2012-06-08T10:11:40.103 回答
1

对于单个图像,我会将其直接存储在表中。您不会膨胀数据库,因为您会将图像大小调整为可接受的大小(即 128x128 像素)。

此外,无需担心文件系统备份和多个 Web 服务器的问题。

于 2012-06-08T10:11:19.980 回答
0

您可以将 HTML 输入标记与文件类型一起使用:

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

可以在此处找到完整的 MVC 示例。

于 2012-06-08T10:09:06.143 回答