http://www.dotblogs.com.tw/mis2000lab/archive/2014/05/19/ashx_beginner_05_db_picture_show_download.aspx

根据前面三篇文章的教学

完成后可以做出来  (请您务必依照顺序学习,不要只是找范例来Copy)

本文做为书本「上集」的 Ch.18 FileUpload 补充范例

ASP.NET 4.5专题实务(I),松岗出版

方法一!

我个人是建议「档案上传时,存在 Web Server硬盘,把存盘的路径与文件名,放入DB」,这种作法最简单!

不用学习新招数就能完成

我的书本(上集) FileUpload也是介绍这种作法,书本内已经有完整范例。

方法二!本文将介绍的.....

如果您坚持要把「档案」存到数据表里面,会遇见两个关卡

2-1.   如何把图片(档案)的二进制IO Stream存入数据表的字段(请设定为 Image数据型态)

2-2.   如何把数据表里面的「二进制」数据,捞出来(读取出来),还原成图片?秀在网页上?

教学影片: http://youtu.be/JfZ3rYchlLo

依照上述第三篇文章里面,我提供的超链接。里面就有很多前辈分享他们的程序代码

看看哪个OK,您就照做,一定可以做得出来。

相关文章如下,任选一篇都能完成:

          微软MSDN范例就有,请看 http://msdn.microsoft.com/zh-tw/library/system.web.ui.webcontrols.fileupload.postedfile(v=vs.110).aspx

http://www.cnblogs.com/travelcai/archive/2007/09/27/907203.html

http://davidma168.wordpress.com/2011/01/25/ashx-%E8%BC%B8%E5%87%BA%E5%9C%96%E7%89%87/

http://davidma168.wordpress.com/2011/01/25/ashx-output-image-2/

===============================================================================================

第一,建立一个数据表

存放「图片、档案」的字段,请设定为 Image数据型态

另一个字段,要设定 MIME格式,通常是把附档名(扩展名)放进去。日后要把这些二进制数据独出来,组合成原本的图片,会用到MIME!

数据表的范例可由此下载 (.sql檔,檔名有 Image字样)

https://onedrive.live.com/?cid=6F7F668080F24B20&id=6F7F668080F24B20%21115

第二,上传的范例,可以看见 FileUpload的程序有些变化

2-1.   不需要存档了    

FileUpload的 .SaveAs()方法用不到。因为档案上传后就写入数据表,不是存在 Web Server硬盘

不用设定存盘的目录、路径

2-2.   上传后,档案(图片)的 IO Stream以「 Byte数组」的方式的方式来读取

便可以把这个 Byte数组的内容(图片的二进制数据),存入数据表中

第三,把DB里面的图片(二进制)还原,秀在网页上

这里我用了两种作法,不过原理都相同

简言之,把读取、还原成图片的动作,放在 .ashx程序里面

3-1.    一般的 Image控件

<asp:Image ID="Image1" runat="server"

ImageUrl='<%# "FileUpload_DB_Image_02_Display.ashx?id=" + Eval("FileUpload_DB_id")%>' />

3-2.    大型控件里面的 ImageField 样板字段

<asp:GridView ,,,,,>

<asp:ImageField DataImageUrlField="FileUpload_DB_id(数据表的域名!)"

DataImageUrlFormatString="FileUpload_DB_Image_02_Display.ashx?id={0}">

</asp:ImageField>

</asp:Gridview>

第四,把图片的读取(从数据库捞出来)。还原成原本的图片MIME格式,都是用 ashx程序来做

本系列的范例,不就是介绍 ASHX吗?

回头看看第一步骤,我们的 FileUpload_DB2 数据表里面,多设计两个「字段」,

一个存放「图片(二进制)」,另外一个存放「扩展名」作为MIME

............原理是不是很清楚了?

===============================================================================================

档案下载:

因为这些范例,也是网络上学习到的

前辈们愿意分享,我做好后也愿意分享 ( 记得要搭配第一个步骤,先把您的 FileUpload_DB2数据表设定完成 )

ASHX_CS.rar      ASHX_VB.rar

知识   因为分享而伟大

把 "大容量"的图片、档案放到数据表的「字段」里面,会有一些缺陷

上课的时候将为您报告这几点。

您也可以参阅 SQL 2012 FileStream,试着了解为何有这些改进?

改善了哪些地方?......以下是 msdn网站的说明

FILESTREAM 可让 SQL Server 架构应用程序在文件系统上储存非结构化的数据,例如文件和影像。 应用程序可以利用文件系统的丰富数据流 API 和效能,并同时维护非结构化数据与对应结构化数据之间的交易一致性。

FILESTREAM 会将 SQL Server Database Engine 与 NTFS 文件系统整合,方法是 varbinary(max) 二进制大型对象 (BLOB) 数据当做档案储存在文件系统上。 Transact-SQL 语句可以插入、更新、查询、搜寻和备份 FILESTREAM 数据。 Win32 文件系统接口提供了数据的数据流方式存取。

FILESTREAM 会使用 NT 系统快取来储存档案数据。 如此可减少 FILESTREAM 数据可能对 Database Engine 效能产生的任何影响。 并不会使用 SQL Server 缓冲池;因此,此内存可用于查询处理。

当您安装或升级 SQL Server 时,并不会自动启用 FILESTREAM。 您必须使用 SQL Server 组态管理员和 SQL Server Management Studio 来启用 FILESTREAM。 若要使用 FILESTREAM,您必须建立或修改数据库,以便包含特殊类型的档案群组。 然后,请建立或修改数据表,让它包含具有 FILESTREAM 属性的 varbinary(max) 数据行。 完成这些工作之后,您就可以使用 Transact-SQL 和 Win32 来管理 FILESTREAM 资料。

想要作到上传图片以后,还要「缩图」

FileUpload以后,缩图(大图变小图)

搜寻关键词「ASP.NET 缩图」就能找到很多范例,可以参阅这几篇文章,很清楚:

http://wangshifuola.blogspot.tw/2011/10/aspnetimage-resize.html

http://demo.tc/Post/95

http://blog.xuite.net/cppbuilder/blog/9331487

[.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField)的更多相关文章

  1. [.ashx檔?泛型处理例程?]基础入门#3....ADO.NET 与 将DB里面的二进制图片还原

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_03_db_picture_show.aspx ...

  2. [.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_02_fileupload_picture_p ...

  3. 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案

    初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...

  4. Expression Blend实例中文教程(3) - 布局控件快速入门Grid

    上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Sil ...

  5. iOS学习笔记——基础控件(上)

    本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...

  6. [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)

    A.概述      在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能      1.按钮点击后,显示为“已下载”,并且不 ...

  7. 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree

    原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...

  8. VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)

    上一节中鸡啄米讲了为Ribbon Bar添加控件的方法.本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数. 一.为Ribbon Bar添加更多Ribbo ...

  9. 浅谈Winform控件开发(一):使用GDI+美化基础窗口

    写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...

随机推荐

  1. Android--输入自动提示AutoCompleteTextView

    布局文件: <TextView android:id="@+id/title" android:layout_width="wrap_content" a ...

  2. Eclipse不能进入断点

    如题:Eclipse不能进入断点,可能是项目没有build,如果是maven项目,clean,在maven install就可以了

  3. CSS :focus 伪类

    :focus -- CSS :focus 伪类,适用于已获取焦点的元素的样式 语法: :focus CSS版本:CSS2 说明: 适用于已获取焦点的元素的样式,例如:表单的input输入框可以输入文字 ...

  4. 编写javascript、Jquery的String.format();

    在javascript.Jquery里面好像是没有String.format();这个函数的,所以我们在拼接字符串的时候就特别的辛苦,生怕又打错,而且又乱,所以就自己去写一个函数来代替. String ...

  5. Django基础篇之数据库选择及相关操作

    在djanjo框架中我们最常用的框架分别就是mysql和sqlit了,下面我们将分别讲述一下这俩种数据库的基础必备知识 mysql 一.利用命令创建(在终端上执行) 1.首先创建一个project项目 ...

  6. 解决visual studio已安装的问题

    使用Windows Install Clean Up(用管理员身份打开),找到相应的软件

  7. OSGI.NET mainfest.xml 配置

    在使用 OSGI.NET进行插件式的开发时,需要对 Mainfest.xml 进行配置, Mainfest 文件是插件的重要配置文件,其中暴露了插件启动方式以及插件启动时所依赖的程序集或其它资源的信息 ...

  8. jQuery Mask

    <script type="text/javascript" src="/assets/mask/jquery.mask.min.js"></ ...

  9. Andriod项目开发实战(1)——如何在Eclipse中的一个包下建新包

    最开始是想将各个类分门别类地存放在不同的包中,所以想在项目源码包中新建几个不同功能的包eg:utils.model.receiver等,最后的结果应该是下图左边这样的:   很明显建立项目后的架构是上 ...

  10. MacOSX和Windows 8的完美融合

    MacOSX和Windows8的完美融合 一般情况下我们要在MACOS系统下运行Windows软件怎么办呢?一种方法我们可以装CrossOver这款软件,然后在configuration->in ...