开发环境:window 2000、sqlserver2000、.net framework sdk正式版 开发语言:c#、asp.net 简介:数据库中图片存储及读取 说明:在asp中,我们用request.totalbytes、request.binaryread()来上传图片,这个可恶的binaryread()方法非常笨,单个文件上传倒没什么大事,单如果多个图片上专可就花大气力了…!而现在asp.net中将会把解决以前asp中文件上传的种种问题,使你在asp.net中轻轻松松开发出功能强大的上传程序,下面大家看看例子啦。 首先在sql server中建立一个图片存储的数库表,sqlscript如下: if exists (select * from dbo.sysobjects where id = object_id(n"[dbo].[image]") and objectproperty(id, n"isusertable") = 1) drop table [dbo].[image] go create table [dbo].[image] ( [img_pk] [int] identity (1, 1) not null , [img_name] [varchar] (50) null , [img_data] [image] null , [img_contenttype] [varchar] (50) null ) on [primary] textimage_on [primary] go alter table [dbo].[image] with nocheck add constraint [pk_image] primary key nonclustered
(
[img_pk]
) on [primary]
go
------------------------------------------------------------
[1] [2]
一、上传图片: imgupload.aspx文件: <%@ page language="c#" codebehind="imgupload.aspx.cs" autoeventwireup="false" inherits="study.uploadimage.imgupload" %> 文件名 选择文件 看图 codebehind文件: using system; using system.collections; using system.componentmodel; using system.data; using system.drawing; using system.web; using system.web.sessionstate; using system.web.ui; using system.web.ui.webcontrols;
using system.web.ui.htmlcontrols;
using system.io;
using system.data.sqlclient;
namespace study.uploadimage
{
///
/// imgupload 的摘要说明。 /// public class imgupload : system.web.ui.page
{
protected system.web.ui.webcontrols.button button1;
protected system.web.ui.htmlcontrols.htmlinputtext imgname;
protected system.web.ui.htmlcontrols.htmlinputfile uploadfile;
private void page_load(object sender, system.eventargs e)
{
// 在此处放置用户代码以初始化页面
}
软件开发网 www.mscto.com
[1] [2]
软件开发网 www.mscto.com
private void button1_click(object sender, system.eventargs e) { stream imgstream; int imglen; string imgname_value; string imgcontenttype; string imguploadedname; imgstream = uploadfile.postedfile.inputstream; imglen = uploadfile.postedfile.contentlength; imguploadedname = uploadfile.postedfile.filename; byte[] imgbinarydata=new byte[imglen]; imgcontenttype = uploadfile.postedfile.contenttype; imgname_value = imgname.value; try { if(imgname_value.length < 1) { imgname_value = getlastrightof("\",imguploadedname ); } } catch(exception myex) { response.write(myex.message); } int n = imgstream.read(imgbinarydata, 0, imglen); int numrowsaffected = mydatabasemethod(imgname_value, imgbinarydata, imgcontenttype); if(numrowsaffected > 0) response.write( " uploaded image " ); else response.write ( " an error occurred uploading the image.d " ); } public string getlastrightof(string lookfor,string mystring) { int strpos; strpos = mystring.lastindexof(lookfor); return mystring.substring(strpos 1); } public int mydatabasemethod(string imgname,byte[] imgbin,string imgcontenttype) { sqlconnection connection = new sqlconnection(application["test_conn"].tostring()); string sql="insert into image (img_name,img_data,img_contenttype) values ( @img_name, @img_data,@img_contenttype )"; sqlcommand command=new sqlcommand ( sql,connection ); sqlparameter param0=new sqlparameter ( "@img_name", sqldbtype.varchar,50 ); param0.value = imgname; command.parameters.add( param0 ); sqlparameter param1=new sqlparameter ( "@img_data", sqldbtype.image ); param1.value = imgbin; command.parameters.add( param1 ); sqlparameter param2 =new sqlparameter ( "@img_contenttype", sqldbtype.varchar,50 );
软件开发网 www.mscto.com
param2.value = imgcontenttype;
command.parameters.add( param2 );
connection.open();
int numrowsaffected = command.executenonquery();
connection.close();
return numrowsaffected;
}
#region web form designer generated code
override protected void oninit(eventargs e)
{
//
// codegen:该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void initializecomponent()
{
this.button1.click = new system.eventhandler(this.button1_click);
this.load = new system.eventhandler(this.page_load);
}
#endregion
}
}
------------------------------------------------------------
软件开发网 www.mscto.com
[1] [2]
软件开发网 www.mscto.com
二、浏览图片: imgvies.aspx文件: <%@ page language="c#" codebehind="imgview.aspx.cs" autoeventwireup="false" inherits="study.uploadimage.imgview" %> codebehind文件: using system; using system.collections; using system.componentmodel; using system.data; using system.drawing; using system.web; using system.web.sessionstate; using system.web.ui; using system.web.ui.webcontrols; using system.web.ui.htmlcontrols; using system.data.sqlclient; namespace study.uploadimage { /// /// imgview 的摘要说明。 /// public class imgview : system.web.ui.page { private void page_load(object sender, system.eventargs e) { sqlconnection mydsn = new sqlconnection(application["test_conn"].tostring()); mydsn.open(); int imgid = int.parse(request.querystring["id"]); string sqltext = "select img_name, img_data, img_contenttype from image where img_pk=" imgid; trace.write(sqltext); sqlcommand mycommand = new sqlcommand (sqltext, mydsn); sqldatareader dr =mycommand.executereader(); if(dr.read()) { response.contenttype = (dr["img_contenttype"].tostring()); response.binarywrite((byte[])dr["img_data"]); } mydsn.close(); } #region web form designer generated code override protected void oninit(eventargs e) { // // codegen:该调用是 asp.net web 窗体设计器所必需的。 // initializecomponent(); base.oninit(e); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void initializecomponent() { this.load = new system.eventhandler(this.page_load); } #endregion } } 这样这个程序就完成了,简单吧。当然还很多改进之处,希望大家多想想多编编一定可以写出更多的图象上传程序。
[1] [2]