现在的位置: 首页 > 综合 > 正文

文件(图片生产缩略图)的上传与下载

2011年01月19日 ⁄ 综合 ⁄ 共 7238字 ⁄ 字号 评论关闭
一、文件(图片)保存到数据库
//得到用户要上传的文件名
            string strFilePathName = loFile.PostedFile.FileName;
            
string strFileName = Path.GetFileName(strFilePathName);
            
int FileLength = loFile.PostedFile.ContentLength;
            
if(FileLength<=0)
                
return;
            
try
            
{//上传文件
                Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
                Stream StreamObject = loFile.PostedFile.InputStream; //建立数据流对像
                
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
                StreamObject.Read(FileByteArray,0,FileLength); 
                
//建立SQL Server链接
                string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
                SqlConnection Con 
= new SqlConnection(strCon);
                String SqlCmd 
= "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
                SqlCommand CmdObj 
= new SqlCommand(SqlCmd, Con);
                CmdObj.Parameters.Add(
"@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
                CmdObj.Parameters.Add(
"@ContentType", SqlDbType.VarChar,50).Value = loFile.PostedFile.ContentType; //记录文件类型
                
//把其它单表数据记录上传
                CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = tbDescription.Text;
                
//记录文件长度,读取时使用
                CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = FileLength;
                Con.Open();
                CmdObj.ExecuteNonQuery(); 
                Con.Close();
                
//跳转页面
                Response.Redirect("ShowAll.aspx");
            }

            
catch
            
{
            }

取出来显示:

int ImgID = Convert.ToInt32(Request.QueryString["ID"]); //ID为图片ID 
            
//建立数据库链接
            string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
            SqlConnection Con 
= new SqlConnection(strCon);
            String SqlCmd 
= "SELECT * FROM ImageStore WHERE ImageID = @ImageID";
            SqlCommand CmdObj 
= new SqlCommand(SqlCmd, Con);
            CmdObj.Parameters.Add(
"@ImageID", SqlDbType.Int).Value = ImgID;
            Con.Open();
            SqlDataReader SqlReader 
= CmdObj.ExecuteReader();
            SqlReader.Read(); 
            Response.ContentType 
= (string)SqlReader["ImageContentType"];//设定输出文件类型
            
//输出图象文件二进制数制
            Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]); 
            Response.End();
            
//也可以保存为图像
//            FileStream fs = new FileStream(@"C:\aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
//            fs.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);
//            fs.Close();

            Con.Close();

二、文件(图片)保存到硬盘   
方法一  /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>

 5        protected void DownloadFile(string filename)
 6        {
 7
 8            string saveFileName = "test.xls";
 9            int intStart = filename.LastIndexOf("\\")+1;
10            saveFileName = filename.Substring(intStart,filename.Length-intStart);
11
12            System.IO.FileInfo fi=new System.IO.FileInfo(filename);
13            string fileextname=fi.Extension;
14            string DEFAULT_CONTENT_TYPE = "application/unknown";
15            RegistryKey regkey,fileextkey;
16            string filecontenttype;
17            try 
18            {                
19                regkey=Registry.ClassesRoot;                
20                fileextkey=regkey.OpenSubKey(fileextname);                
21                filecontenttype=fileextkey.GetValue("Content Type",DEFAULT_CONTENT_TYPE).ToString();
22            }

23            catch
24            {
25                filecontenttype=DEFAULT_CONTENT_TYPE;
26            }
      
27
28
29            Response.Clear();
30            Response.Charset = "utf-8";
31            Response.Buffer= true;
32            this.EnableViewState = false;
33            Response.ContentEncoding = System.Text.Encoding.UTF8;
34
35            Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 
36            Response.ContentType=filecontenttype;
37
38            Response.WriteFile(filename); 
39            Response.Flush();
40            Response.Close();
41
42            Response.End();
43        }

44    
方法二
  /// <summary>
 2        /// 下载文件
 3        /// </summary>
 4        /// <param name="filename">文件物理地址</param>

 5        protected void DownloadFile(string filename)
 6        {
 7            string saveFileName = "test.xls";
 8            int intStart = filename.LastIndexOf("\\")+1;
 9            saveFileName = filename.Substring(intStart,filename.Length-intStart);
10
11            Response.Clear();
12            Response.Charset = "utf-8";
13            Response.Buffer= true;
14            this.EnableViewState = false;
15            Response.ContentEncoding = System.Text.Encoding.UTF8;
16
17            Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 
18            Response.WriteFile(filename); 
19            Response.Flush();
20            Response.Close();
21
22            Response.End();
23        }
文件的ContentType类型 小全

抱歉!评论已关闭.