zhangyu028

导航

上传下载文件类

上传多文件到数据库或文件夹,从数据库或文件夹下载文件的类。
一些说明:
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!=nullthis.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("上传文件失败!");
下载:
下载代码
下载页面ShowFile.aspx,这里我是用的从文件地址,你可以改为从数据库下载DownFileFromDB
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();
            }

        }

有问题告诉我

posted on 2005-12-14 11:54  张 宇  阅读(742)  评论(1)    收藏  举报