[.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField)
根据前面三篇文章的教学
完成后可以做出来 (请您务必依照顺序学习,不要只是找范例来Copy)
- [.ashx檔?泛型处理程序?]基础入门#1....能否用中文教会我?别说火星文?
- [.ashx檔?泛型处理程序?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)
- [.ashx檔?泛型处理程序?]基础入门#3....ADO.NET 与 将DB里面的二进制图片还原
本文做为书本「上集」的 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/
- http://4068205.blog.51cto.com/4058205/1090928 推荐!
- http://www.dotblogs.com.tw/ligthwaver/archive/2011/09/21/37066.aspx 简单!
- http://welkingunther.pixnet.net/blog/post/25986417-(asp.net)%E7%94%A8http-handler%E6%8A%8A%E8%B3%87%E6%96%99%E5%BA%AB%E7%9A%84%E4%BA%8C%E9%80%B2%E4%BD%8D%E5%9C%96%E7%89%87%E6%AA%94%E9%A1%AF
- http://www.soaspx.com/dotnet/asp.net/tech/tech_20100204_2767.html
===============================================================================================
第一,建立一个数据表
存放「图片、档案」的字段,请设定为 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数据表设定完成 )
知识 因为分享而伟大
把 "大容量"的图片、档案放到数据表的「字段」里面,会有一些缺陷
上课的时候将为您报告这几点。
您也可以参阅 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://blog.xuite.net/cppbuilder/blog/9331487
[.ashx檔?泛型处理程序?]基础入门#5....ADO.NET 与 将DB里面的二进制图片还原 (范例下载 & 大型控件的ImageField)的更多相关文章
- [.ashx檔?泛型处理例程?]基础入门#3....ADO.NET 与 将DB里面的二进制图片还原
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_03_db_picture_show.aspx ...
- [.ashx檔?泛型处理例程?]基础入门#2....FileUpload上传前,预览图片(两种作法--ashx与JavaScript)
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/20/ashx_beginner_02_fileupload_picture_p ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- Expression Blend实例中文教程(3) - 布局控件快速入门Grid
上一篇对Blend 3开发界面进行了快速入门介绍,本篇将基于Blend 3介绍Silverlight控件.对于微软开发工具熟悉的朋友,相信您很快就熟悉Blend的开发界面和控件. XAML概述 Sil ...
- iOS学习笔记——基础控件(上)
本篇简单罗列一下一些常用的UI控件以及它们特有的属性,事件等等.由于是笔记,相比起来不会太详细 UIView 所有UI控件都继承于这个UIView,它所拥有的属性必是所有控件都拥有,这些属性都是控件最 ...
- [iOS基础控件 - 5.5] 代理设计模式 (基于”APP列表"练习)
A.概述 在"[iOS基础控件 - 4.4] APP列表 进一步封装,初见MVC模式”上进一步改进,给“下载”按钮加上效果.功能 1.按钮点击后,显示为“已下载”,并且不 ...
- 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree
原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...
- VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)
上一节中鸡啄米讲了为Ribbon Bar添加控件的方法.本节教程鸡啄米将继续完善前面的实例,讲解一些稍复杂的控件的添加方法,及如何为它们添加消息处理函数. 一.为Ribbon Bar添加更多Ribbo ...
- 浅谈Winform控件开发(一):使用GDI+美化基础窗口
写在前面: 本系列随笔将作为我对于winform控件开发的心得总结,方便对一些读者在GDI+.winform等技术方面进行一个入门级的讲解,抛砖引玉. 别问为什么不用WPF,为什么不用QT.问就是懒, ...
随机推荐
- ubuntu搭建分布式hadoop-2.6.0概略和错误
详细配置:http://blog.csdn.net/ggz631047367/article/details/42426391 1.修改机器/etc/hostname分别为 master s ...
- Oracle 的过程与函数
一.过程 1 .过程创建和调用 过程 (procedure) 是一个 PL/SQL 语句块,它存储在数据字典中并可被应用程序调用.可以使用过程存储数据库中频繁使用的应用逻辑.当执行一个过程时,其语句被 ...
- Qt下QWizard改变next,back等默认按钮的大小及背景
默认的按钮又小又丑,想改大点漂亮点. 百度没百出来,最后用google 在这里: http://stackoverflow.com/questions/16425575/change-qwizard- ...
- android NDk环境编译总结
首先,这篇文章的撰写是基于很多前人的优秀的帖子,感谢他们的分享让我能够学习这么多的知识.谢谢 Android NDK开发环境的搭建 前言: Android 上,应用程序的开发,大部分基于 Java 语 ...
- jmeter做接口测试
jmeter做接口测试有两种方式: 1. 2.
- POJ2376_Cleaning Shifts_C++
题目:http://poj.org/problem?id=2376 英文题强行看不懂,只看的懂输入输出,输入n,m,下接n行每行一个区间两个数左端点 l,有端点 r 给出n个闭区间,求选择最少的区间能 ...
- 初探接口测试框架--python系列2
点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...
- Oozie 中各种类型的作业执行结果记录
一,提交的作业被SUSPEND,然后再被KILL,记录如下: TYPE1: appType WORKFLOW_JOB id 0000002-160516095026479-oozie-oozi-W e ...
- CentOS安装 Docker
系统的要求64 位操作系统,内核版本至少为 3.10. Docker 目前支持 CentOS 6.5 及以后的版本,推荐使用 CentOS 7 系统. cat /proc/version 首先,也是要 ...
- USACO Section 3.3 骑马修栅栏 Riding the Fences
题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...