blob表
3 id int 4 0
0 name char 50 1
0 blob image 16 1
0 type char 60 1
savefile.aspx.cs
private void button1_click(object sender, system.eventargs e)
{
stream imgdatastream = file1.postedfile.inputstream;
int imgdatalen = file1.postedfile.contentlength;
string imgtype = file1.postedfile.contenttype;
string name = this.getfilenamebyurl(this.file1.postedfile.filename);
byte[] imgdata = new byte[imgdatalen];
int n = imgdatastream.read(imgdata,0,imgdatalen);
string connstr = "workstation id=overmind;packet size=4096;user id=sa;password=sa;data source=overmind;persist security info=false;initial catalog=wztj";
sqlconnection connection = new sqlconnection(connstr);
sqlcommand command = new sqlcommand("insert into blob(name,type,blob) values ( @imgtitle, @type,@blob )", connection );
sqlparameter paramtitle = new sqlparameter("@imgtitle", sqldbtype.varchar,50 );
paramtitle.value = name;
command.parameters.add(paramtitle);
sqlparameter paramdata = new sqlparameter( "@blob", sqldbtype.image );
paramdata.value = imgdata;
command.parameters.add( paramdata );
sqlparameter paramtype = new sqlparameter( "@type", sqldbtype.varchar,50 );
paramtype.value = imgtype;
command.parameters.add( paramtype );
wztj.debug.testsql.traceerrorsql("insert into blob(name,type,blob) values ( @imgtitle, @type,@blob )",command.parameters);
connection.open();
int numrowsaffected = command.executenonquery();
connection.close();
}
listfile.aspx//这个东西主要用来列表,把已经有的东西列出来
<asp:hyperlinkcolumn datanavigateurlfield="id" headertext="产品名称" datanavigateurlformatstring="./getfile.aspx?id={0}" datatextfield="name" datatextformatstring="{0}" itemstyle-horizontalalign="center" itemstyle-width="160px">
listfile.aspx.cs
string connstr="workstation id=overmind;packet size=4096;user id=sa;password=sa;data source=overmind;persist security info=false;initial catalog=wztj";
sqlconnection connection = new sqlconnection(connstr);
sqlcommand command = new sqlcommand("select * from blob", connection );
connection.open();
sqldataadapter adaptor = new sqldataadapter(command);
dataset ds = new dataset();
adaptor.fill(ds,"blob");
connection.close();
this.datagrid1.datasource=ds.tables["blob"].defaultview;
this.datagrid1.databind();
getfile.aspx.cs//这个文件比较重要负责把村道数据库里面的文件,按照格式,按照名称,给传输出来
private void page_load(object sender, system.eventargs e)
{
string imgid =this.request.querystring.get("id");
//request.querystring["imgid"];
string connstr="workstation id=overmind;packet size=4096;user id=sa;password=sa;data source=overmind;persist security info=false;initial catalog=wztj";
string sql="select name,blob, type from blob where id = " + imgid;
sqlconnection connection = new sqlconnection(connstr);
sqlcommand command = new sqlcommand(sql, connection);
connection.open();
sqldatareader dr = command.executereader();
if(dr.read())
{
response.clear();
response.buffer= true;
response.charset="gb2312";
response.contentencoding=system.text.encoding.getencoding("gb2312");//设置输出流为简体中文
//response.contenttype = "application/ms-word";//设置输出文件类型为word文件。
response.contenttype = dr["type"].tostring();
response.binarywrite( (byte[]) dr["blob"] );
string filename = dr["name"].tostring().trim();
filename=system.web.httputility.urlencode(filename,system.text.encoding.utf8 );
response.appendheader("content-disposition", "attachment;filename="+filename);
}
connection.close();
}
这里要说的有两点,第一,就是把文件的名称getfile.aspx变成我们想要的名称。
response.appendheader("content-disposition", "attachment;filename="+filename);
第二,就是把指定的名称变成我们想要的值,是标准的中文,而不是中文的乱码。
filename=system.web.httputility.urlencode(filename,system.text.encoding.utf8 );
