// 得到用户要上传的文件名 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);1112 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 catch24 { 25 filecontenttype=DEFAULT_CONTENT_TYPE;26 } 272829 Response.Clear();30 Response.Charset = "utf-8";31 Response.Buffer= true;32 this.EnableViewState = false;33 Response.ContentEncoding = System.Text.Encoding.UTF8;3435 Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 36 Response.ContentType=filecontenttype;3738 Response.WriteFile(filename); 39 Response.Flush();40 Response.Close();4142 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);1011 Response.Clear();12 Response.Charset = "utf-8";13 Response.Buffer= true;14 this.EnableViewState = false;15 Response.ContentEncoding = System.Text.Encoding.UTF8;1617 Response.AppendHeader("Content-Disposition","attachment;filename=" + saveFileName); 18 Response.WriteFile(filename); 19 Response.Flush();20 Response.Close();2122 Response.End();23 }文件的ContentType类型 小全 出现提示框 string strFile = " F:\\a.doc " ; // 路径根据实际情况而定 if ( ! System.IO.File.Exists(strFile)) { Response.Write("<script language='javascript'>alert('对不起,文件不存在!');</script>"); return; } Response.Clear(); Response.ClearHeaders(); Response.Charset = " GB2312 " ; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = " application/octet-stream " ; FileInfo fi = new FileInfo(strFile); Response.AddHeader( " Content-Disposition " , " attachment; filename= " + HttpUtility.UrlEncode(fi.Name)) ; Response.AddHeader( " Content-Length " ,fi.Length.ToString()); byte [] tmpbyte = new byte [ 1024 * 8 ]; FileStream fs = fi.OpenRead(); int count; while ((count = fs.Read(tmpbyte, 0 ,tmpbyte.Length)) > 0 ) { Response.BinaryWrite(tmpbyte); Response.Flush(); } fs.Close(); Response.End();直接在浏览器中打开 string strFile = " F:\\a.doc " ; // 路径根据实际情况而定 Response.Clear(); Response.ClearHeaders(); Response.Charset = " GB2312 " ; Response.ContentEncoding = System.Text.Encoding.UTF8; Response.ContentType = " application/msword " ; Response.WriteFile(strFile);
/// <summary> 2 /// 上传图片 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 /// <returns>操作结果</returns> 7 private bool ImageUpload( int nWidth, int nHeight) 8 { 9 System.Web.HttpFileCollection files = Request.Files;10 System.Web.HttpPostedFile pf = files[0];11 string sOldPath = pf.FileName.ToString();12 int i = sOldPath.LastIndexOf("\\");13 string sOldName = sOldPath.Substring(i+1,sOldPath.Length-i-1);14 //"L"代表大图 && "S"代表缩略图15 string sTimeNo = System.DateTime.Now.ToString("yyMMddHHmmss");16 string sNewNameL = "L"+sTimeNo+"_"+sOldName;17 string sNewNameS = sNewNameL.Replace("L"+sTimeNo,"S"+sTimeNo);18 string sNewPathL = Server.MapPath("../images/uploadfiles/")+sNewNameL;19 string sNewPathS = Server.MapPath("../images/uploadfiles/")+sNewNameS;20 if(System.IO.File.Exists(sNewPathL)||System.IO.File.Exists(sNewPathS))21 { 22 Page.RegisterStartupScript("FailToUpload","<script>alert('文件名已存在!');</script>");23 return false;24 }25 else26 { 27 pf.SaveAs(sNewPathL);//保存原图28 string strContentType = pf.ContentType.ToString();29 if(strContentType.IndexOf("image/")<0)30 { 31 Page.RegisterStartupScript("KeyEro","<script>alert('无效的图片格式!');</script>");32 return false;33 }34 else35 { 36 this.GetThumbNail(sOldPath,strContentType,sNewPathS,nWidth, nHeight);37 this.Image1.ImageUrl = sNewPathS;38 return true;39 }40 }41 } 42 /// <summary>43 /// 生成缩略图44 /// </summary>45 /// <param name="FileName">待上传文件的完全限定名</param>46 /// <param name="strContentType">待上传文件的内容类型</param>47 /// <param name="path">路径</param>48 /// <param name="nWidth">宽</param>49 /// <param name="nHeight">高</param> 50 private void GetThumbNail( string FileName, string strContentType, string path, int nWidth, int nHeight) 51 { 52 System.Drawing.Image oImage;53 oImage = System.Drawing.Image.FromFile(FileName);54 oImage = oImage.GetThumbnailImage(nWidth,nHeight,null,IntPtr.Zero);55 // MemoryStream ms = new MemoryStream();56 // Response.ContentType = strContentType;57 // oImage.Save(ms,strContentType);58 oImage.Save(path,this.GetContenType(strContentType));59 // ms.WriteTo(Response.OutputStream);60 } 61 /// <summary>62 /// 获取保存文件的格式63 /// </summary>64 /// <param name="strContentType">待上传文件的内容类型</param>65 /// <returns>文件格式</returns> 66 private System.Drawing.Imaging.ImageFormat GetContenType( string strContentType) 67 { 68 //只写少数几种格式69 if(strContentType.ToString().ToLower()== "image/bmp")70 return System.Drawing.Imaging.ImageFormat.Bmp;71 else if(strContentType.ToString().ToLower()== "image/gif")72 return System.Drawing.Imaging.ImageFormat.Gif;73 else74 return System.Drawing.Imaging.ImageFormat.Jpeg;75 } For example:Response.ContentType = " image/jpeg " ;Response.AppendHeader( " Content-Disposition " , " attachment; filename=SailBig.jpg " );Response.TransmitFile( Server.MapPath( " ~/images/sailbig.jpg " ) );Response.End();