上传下载文件类
上传多文件到数据库或文件夹,从数据库或文件夹下载文件的类。
一些说明:
clsODBCDB是数据库代理类。
lDB是数据库代理对象
你可以用你自己的数据库代理
using System;
using System.Web;
using System.IO;
namespace Computer.SYS
{
/// <summary>
/// clsFileInput 的摘要说明。
/// </summary>
public class clsUpDownFile
{
clsODBCDB lDB;//数据库代理
HttpPostedFile upFile;//上传的单文件
System.Web.HttpFileCollection upFiles;//上传的多文件集合
string billno;
/// <summary>
/// 上传下载文件类
/// </summary>
/// <param name="upfile">上传的单文件</param>
/// <param name="upfile">单据号</param>
public clsUpDownFile(HttpPostedFile upfile,string bno)
{
this.upFile=upfile;
this.billno=bno;
}
public clsUpDownFile()
{
}
/// <summary>
/// 上传下载文件类
/// </summary>
/// <param name="upfiles">上传的多文件集合</param>
public clsUpDownFile(System.Web.HttpFileCollection upfiles,string bno)
{
this.upFiles=upfiles;
this.billno=bno;
}
/// <summary>
/// 上传文件到数据库
/// </summary>
/// <param name="tablename">表名</param>
/// <returns></returns>
public bool UpFileToDB(string tablename)
{
try
{
string _billno=billno;
byte[] _filebody=getBinaryFile();
string _filename=getFileName();
string _fileexpand=getFileExpand();
string _filetype=upFile.ContentType;
DateTime _inputdate=DateTime.Now;
this.lDB=new clsODBCDB();
this.lDB.SqlStr="INSERT INTO "+tablename+" (bill_no,filebody,filename,fileexpand,filetype,inputdate) VALUES"
+"(?,?,?,?,?,?)";
this.lDB.Parameters.Add("@billno",System.Data.Odbc.OdbcType.VarChar).Value=_billno;
this.lDB.Parameters.Add("@filebody",System.Data.Odbc.OdbcType.Image,_filebody.Length).Value=_filebody;
this.lDB.Parameters.Add("@filename",System.Data.Odbc.OdbcType.VarChar).Value=_filename;
this.lDB.Parameters.Add("@fileexpand",System.Data.Odbc.OdbcType.VarChar).Value=_fileexpand;
this.lDB.Parameters.Add("@filetype",System.Data.Odbc.OdbcType.VarChar).Value=_filetype;
this.lDB.Parameters.Add("@inputdate",System.Data.Odbc.OdbcType.DateTime).Value=_inputdate;
if (this.lDB.ExeCmd())
return true;
else
return false;
}
catch
{
return false;
}
}
/// <summary>
/// 上传文件到文件夹,同时写文件原始属性到数据库
/// </summary>
/// <param name="identify">识别码,以防止不同用户在同一时刻上传文件,出现相同文件名</param>
/// <param name="filefolder">上传文件文件夹</param>
/// <param name="tablename">记录文件原始属性的表名</param>
/// <returns></returns>
public bool UpFileToFolder(string identify,string filefolder,string tablename)
{
try
{
string _billno=billno;
string _filename=getFileName();
string _fileexpand=getFileExpand();
string _filealiasname=filefolder+identify+DateTime.Now.ToString("yyyyMMddhhmmfffffff")+_fileexpand;
string _filetype=upFile.ContentType;
DateTime _inputdate=DateTime.Now;
this.lDB=new clsODBCDB();
this.lDB.SqlStr="INSERT INTO "+tablename+" (bill_no,filename,filealiasname,fileexpand,filetype,inputdate) VALUES"
+"(?,?,?,?,?,?)";
this.lDB.Parameters.Add("@billno",System.Data.Odbc.OdbcType.VarChar).Value=billno;
this.lDB.Parameters.Add("@filename",System.Data.Odbc.OdbcType.VarChar).Value=_filename;
this.lDB.Parameters.Add("@filealiasname",System.Data.Odbc.OdbcType.VarChar).Value=_filealiasname;
this.lDB.Parameters.Add("@fileexpand",System.Data.Odbc.OdbcType.VarChar).Value=_fileexpand;
this.lDB.Parameters.Add("@filetype",System.Data.Odbc.OdbcType.VarChar).Value=_filetype;
this.lDB.Parameters.Add("@inputdate",System.Data.Odbc.OdbcType.DateTime).Value=_inputdate;
this.lDB.BeginTrans();
if (!this.lDB.ExeCmd())
return false;
upFile.SaveAs(_filealiasname);
this.lDB.Commit();
return true;
}
catch(Exception ex)
{
if (this.lDB.TransFlag) this.lDB.Rollback();
return false;
}
finally
{
if (this.lDB!=null) this.lDB.Free();
}
}
/// <summary>
/// 上传多文件到文件夹
/// </summary>
/// <param name="identify">识别码,以防止不同用户在同一时刻上传文件,出现相同文件名</param>
/// <param name="filefolder">上传文件文件夹</param>
/// <param name="tablename">记录文件原始属性的表名</param>
/// <returns></returns>
public bool upFilesToFolder(string identify,string filefolder,string tablename)
{
try
{
string _bill_no=billno;
string _upurl=filefolder;
string _tablename=tablename;
//遍历File表单元素
for(int iFile = 0; iFile < upFiles.Count; iFile++)
{
//检查文件扩展名字
HttpPostedFile postedFile = upFiles[iFile];
string fileName;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
//如果文件名不为空,上传
if (fileName!="")
{
this.upFile=postedFile;
if (!UpFileToFolder(identify,_upurl,_tablename))
throw new Exception();
}
}
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 从数据库返回文件的字节数组
/// </summary>
/// <param name="tablename">数据库表名</param>
/// <param name="keyid">关键字</param>
/// <param name="filetype">文件类型</param>
/// <param name="filename">文件名</param>
/// <returns></returns>
public byte[] DownFileFromDB(string tablename,string keyid,out string filetype,out string filename)
{
try
{
this.lDB=new clsODBCDB();
this.lDB.SqlStr="SELECT filetype,filename,filebody FROM "+tablename+" WHERE id="+keyid;
if (this.lDB.ExeSql())
{
if (this.lDB.ResultTable.Rows.Count>0)
{
filetype=this.lDB.ResultTable.Rows[0]["filetype"].ToString();
filename=this.lDB.ResultTable.Rows[0]["filename"].ToString();
return (byte[])this.lDB.ResultTable.Rows[0]["filebody"];
}
else
throw new Exception();
}
else
throw new Exception();
}
catch(Exception ex)
{
filetype="";
filename="";
return new byte[0];
}
}
/// <summary>
/// 从文件夹返回文件的字节数组
/// </summary>
/// <param name="tablename">存储文件原始信息的表</param>
/// <param name="keyid">关键字</param>
/// <param name="filetype">文件类型</param>
/// <param name="filename">文件名</param>
/// <returns></returns>
public byte[] DownFileFromFolder(string tablename,string keyid,out string filetype,out string filename)
{
try
{
string _filealiasname;
this.lDB=new clsODBCDB();
this.lDB.SqlStr="SELECT filetype,filename,filealiasname FROM "+tablename+" WHERE id="+keyid;
if (this.lDB.ExeSql())
{
if (this.lDB.ResultTable.Rows.Count>0)
{
filetype=this.lDB.ResultTable.Rows[0]["filetype"].ToString();
filename=this.lDB.ResultTable.Rows[0]["filename"].ToString();
_filealiasname=this.lDB.ResultTable.Rows[0]["filealiasname"].ToString();
if(File.Exists(_filealiasname))
{
System.IO.FileStream fs=File.OpenRead(_filealiasname);
byte[] buffer=new byte[Convert.ToInt32(fs.Length)];
fs.Read(buffer,0,Convert.ToInt32(fs.Length));
return buffer;
// return ConvertStreamToByteBuffer(fs);
}
else
throw new Exception();
}
else
throw new Exception();
}
else
throw new Exception();
}
catch(Exception ex)
{
filetype="";
filename="";
return new byte[0];
}
} 
/// <summary>
/// getBinaryFile:返回所给文件的字节数组。
/// </summary>
/// <returns></returns>
public byte[] getBinaryFile()
{
try
{
Int32 filelength=upFile.ContentLength;
if(filelength>0)
{
Byte[] FileByte = new Byte[filelength];
Stream upStream = upFile.InputStream;
upStream.Read(FileByte,0,filelength);
return FileByte;
}
else
{
return new byte[0];
}
}
catch(Exception e)
{
return new byte[0];
}
}
private string getFileName()
{
FileInfo fileinfo=new FileInfo(upFile.FileName);
return fileinfo.Name;
}
private string getFileExpand()
{
FileInfo fileinfo=new FileInfo(upFile.FileName);
return fileinfo.Extension;
}
}
}
if exists (select 1
from sysobjects
where id = object_id('com_hw_file_up')
and type = 'U')
drop table com_hw_file_up
go

/*==============================================================*/
/* Table: com_hw_file_up */
/*==============================================================*/
create table com_hw_file_up (
id numeric(12,0) identity,
bill_no varchar(20) not null,
filebody image null,
filename varchar(100) not null,
filealiasname varchar(100) null,
fileexpand varchar(10) null,
filetype varchar(20) null,
inputdate datetime not null,
constraint PK_COM_HW_FILE_UP primary key (id)
)
go

用法:
上传:
//增加附件
clsUpDownFile upf=new clsUpDownFile(this.Request.Files,_bill_no);
string _folder=Request.MapPath("../../UPFILE/HARDWARE/");
if (!upf.upFilesToFolder(this.Session["zgbh"].ToString(),_folder,Project.UpFileTable))
throw new Exception("上传文件失败!");
private void Page_Load(object sender, System.EventArgs e)
{
if (Request["keyid"]!=null)
{
clsUpDownFile clu=new clsUpDownFile();
string atttable=Request["atttable"].ToString();
string filetype;
string filename;
byte[] filebody=clu.DownFileFromFolder(atttable,Request["keyid"].ToString(),out filetype,out filename);
this.Response.ContentType=filetype;
this.Response.AppendHeader("Content-Disposition","attachment;filename="+ HttpUtility.UrlEncode(filename));
this.Response.BinaryWrite(filebody);
this.Response.End();
}
}有问题告诉我


浙公网安备 33010602011771号