MIS2000 Lab. -- ASP.NET学习&分享 / ASP.NET案例精编(清华大学出版社)
您好,我来自台湾。很高兴与各位分享一些成果。希望对您有帮助。出版书籍是「ASP.NET案例精编 / 清华大学出版社」。

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

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

 

 

posted on 2014-05-27 14:43  MIS2000 Lab.  阅读(175)  评论(0编辑  收藏  举报


ASP.NET案例精编——适用于VS 2005/2008(配光盘)
 

当当网购买 http://product.dangdang.com/product.aspx?product_id=20583373&ref=search-1-pub