域名申请 虚拟主机 电子商务 搜索引擎排名 网络推广 信康网络
域名注册,企业邮局,虚拟主机
新闻中心 | 用户注册 | 用户中心 | 商务快车 | 电商文章 | 建站资料 | 智能建站 | 中小企业呼叫中心 
企业邮局 虚拟主机 域名注册 虚拟主机 网上商店 企业邮局 网站制作 网站推广 自助建站
 |  建站资料>>ASP技术>>导出保存于数据库中的图片

  打印

导出保存于数据库中的图片

http://www.sinocom.net  2010-1-8  信康网络


  最近发现有个客户的网站占用资源特别高,他的access数据库文件已经高达450M了,经过查看,发现他的很多图片都保存在了数据库中,导致数据库文件过大。

  这才想起来,以前经常看到有人图方便把图片放在数据库中,以前也没有想这样做有什么不好的,现在才发现,如果记录比较多,图片又大的话,数据库会很快膨胀起来的,看样子,在数据库中存图片还真不是个好主意。

  为了解决这个问题,需要做2件事情,一个是把图片读出来存在某个指定的目录下,另一个就是在数据库中记录下存放地址和调用方式,后面的很简单,更改一下数据库记录就行了,前一面一个解决稍微麻烦点,要把二进制数据从数据库中读出并保存成文件。

  客户的网站是基于asp+access的,网站本身支持FSO,据此写了以下代码,经过测试成功实现了从数据库中导出图片记录的要求。

  下面是代码:

<%
Function getWebImages(url)
dim http
set http=server.createobject("MSXML2.XMLHTTP")
Http.open "GET",url,false
Http.send()
if Http.readystate<>4 then exit function
getHTTPimg=Http.responseBody
set http=nothing
end function

Function SaveImg2Local(from,tofile)
dim geturl,objStream,imgs
geturl=trim(from)
imgs=getWebImages(geturl)
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Type =1
objStream.Open
objstream.write imgs
objstream.SaveToFile tofile,2
objstream.Close()
set objstream=nothing
end function

DBPath = "D:\Website\xxx.com\xxx.mdb" '这里是数据库的位置
DSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath
set conn=server.CreateObject("adodb.connection")
conn.open DSN
set rs=server.createobject("ADODB.recordset")
sql="select newsid from news where not isnull(img)" '如果img字段不是空的就读出来
rs.open sql,conn,1,1
for n=1 to rs.recordcount
call SaveImg2Local("http://www.xxx.com/showimg.asp?newsid="&rs("newsid"),server.MapPath(rs("newsid")&".jpg")) '以newsid号为文件名称进行保存
rs.movenext
next
rs.close
set rs=nothing
conn.close
set conn=nothing
%>

下面是showimg.asp的代码:

<%

DBPath = "D:\Website\xxx.com\xxx.mdb" '这里是数据库的位置
DSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath
set conn=server.CreateObject("adodb.connection")
conn.open DSN
set rs=server.createobject("ADODB.recordset")

rs.open "select img from news where newsid=" & trim(request("newsid")),conn,1,1
Response.ContentType = "image/pjpeg"
Response.BinaryWrite rs("img").getChunk(7500000)
rs.close
set rs=nothing

conn.close

set conn=nothing
%>

原作者:王惠勇
来源:本站原创
共有726位读者阅读过此文

告诉好友

上篇文章:不刷新页面改变下拉菜单内容
下篇文章:MSSQL和Access数据库的区别

□- 本周热门文章 □- 本文相关文章
导出保存于数据库中的图片
关于我们 | 联系我们 | 汇款方式 | 合作伙伴 | 独立面板
Copyright © 1999-2012 SinoCOM,Inc. All rights reserved
合作伙伴  京ICP证090221  备案编号:京ICP备10018088号  京公网安备1101060577
北京信康技术有限公司 版权所有