使用 mvc3 将图像保存到文件系统

Posted

技术标签:

【中文标题】使用 mvc3 将图像保存到文件系统【英文标题】:Saving image to the filesystem using mvc3 【发布时间】:2012-06-12 09:23:52 【问题描述】:

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

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

谢谢

【问题讨论】:

【参考方案1】:

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

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

一些建议:

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

【讨论】:

【参考方案2】:

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

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

我使用字节流/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/ 让我知道这是否可行或者您是否需要代码示例。

【讨论】:

请注意,他希望将图像保存在文件系统中,而不是数据库中,因此您正在回答不同的问题。 哇,这个系列教程很有前途。我会试一试并通知你。谢谢 Cad 是对的,抱歉,我的目的是为了在 DB 中持久化 IMAGE SOURCE,您特别要求文件系统。午饭后我会相应地更新上述内容。 @panjo:我看到 cad 在这里对你的另一个问题给出了很好的答案 :) ***.com/questions/10945692/… @garfbradaz 制作另一个教程,你的教程的变体,但保存图像路径而不是二进制源,这将是一个好主意。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

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

完整的 MVC 示例可以在这里找到 here。

【讨论】:

以上是关于使用 mvc3 将图像保存到文件系统的主要内容,如果未能解决你的问题,请参考以下文章

将图像保存到文件系统

将base64中的字符串转换为图像并保存在文件系统中

如何将base64图像转换为图像并将其保存到文件系统[重复]

一次快速将多个图像保存到文件系统,高CPU

React-native-android - 如何将图像保存到Android文件系统并在手机的“图库”中查看

在邮件中嵌入图像而无需物理图像文件