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. 【原】linux系统运维工具必备

    操作系统:CentOS※,Ubuntu 网站服务:apache,nginx※,tomcat,tengine 开发语言:php,python※,shell※ 数据库 :Mysql※ 代理相关:lvs,k ...

  2. UVA12653 Buses

    Problem HBusesFile: buses.[c|cpp|java]Programming competitions usually require infrastructure and or ...

  3. [转]用man查看命令帮助时, 括号中的数字表示的意思

    当提及如'rn(1)', 'ctime(3)'时,它们看上去像某种函数调用,但不是. 这些数字表示可在"Unix manual"中的哪一部分找到对应的文档. 数字对应的文档如下: ...

  4. WIFI知识累计之802.11协议radiotap头解析方法

    radiotap官方网站:http://www.radiotap.net/Radiotap 该网站详细介绍了radiotap的各个字段的长度和介绍,并包含解析代码项目地址,该文就在此网站的基础编写一些 ...

  5. maven多工程构建与打包

    目标:webapp_aggregator为聚合和父pom工程,不包含代码和资源,webapp为主web工程,webapp_module1为子web工程,webapp_common为基础子工程,两个we ...

  6. Filter Blue Light for Better Sleep(APP 推荐)

    Filter Blue Light for Better Sleep By Carolyn Mohr11 May, 2016 Many people like to use their phones ...

  7. asp.net 播放flash

    注意3点: 1.路径,swf播放器对应的是当前页面的路径,flv视频对应的是swf播放器的路径2.路径中不能出现中文3.IIS设置,IIS站点属性中的HTTP头->MIME添加MIME影射关系, ...

  8. MVC 百度地图的基本使用

    最近做的这个项目里面为了方便路线查询,将百度地图的插件加到了项目里,效果图如下: 下面我就把我的步骤贴出来: 第一步:进网站 http://developer.baidu.com/map/注册 第二步 ...

  9. php获取文件创建时间、修改时间

    filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE.时间以 Unix 时间戳的方式返回,可用于 date(). 例如:$a=filemtime ...

  10. 使用SSL确保通信中的数据安全

    #region Server /// <summary> /// 用于保存非对称加密(数字证书)的公钥 /// </summary> private string public ...