前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="图片二进制存储与读取_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title>无标题页</title> <mce:script type="text/javascript"><!-- function AddAttachments() { document.getElementById("attach").innerText = "继续添加附件"; //tb变量未加var在javascript中代表全局变量 tb = document.getElementById("attachments"); var newRow = tb.insertRow(); newRow.insertCell().innerHTML = "<input type='file' size='50' name='File' /> <input type='button' value='删除' οnclick='delFile(this.parentElement.parentElement.rowIndex)' />"; } function delFile(index) { document.getElementById("attachments").deleteRow(index); tb.rows.length > 0 ? document.getElementById('attach').innerText = "继续添加附件" : document.getElementById("attach").innerText = "添加附件"; } // --></mce:script> <mce:script language="javascript"><!-- function OpenImages() { document.getElementById("ifm").src="Default2.aspx"; } // --></mce:script></head><body> <form id="form1" runat="server" enctype="multipart/form-data" method="post"> <div> <table id="attachments"> </table> <a id="attach" name="attach" href="javascript:;" mce_href="javascript:;" style="font-family: 宋体; font-size: 9pt;" mce_style="font-family: 宋体; font-size: 9pt;" title="如果您要发送多个附件,您只需多次点击“继续添加附件”即可, 要注意附件总量不能超过发送限制的大小" οnclick="AddAttachments()"> 添加附件</a> <br /> <br /> <br /> <asp:Button ID="btnSend" runat="server" Text="保存方式一:存储图片路径" OnClick="btnSend_Click" /> </div> <br /> <br /> <br /> <div> <table width="50%" cellpadding="0" cellspacing="0"> <tr> <td align="left"> <font style="font-family: 宋体; font-size: 9pt;" mce_style="font-family: 宋体; font-size: 9pt;">添加附件</font></td> <td align="left"> <input type="file" id="ImgUpload" runat="server" /> </td> </tr> </table> <br /> <br /> <asp:Button ID="btnSend1" runat="server" Text="保存方式二:以二进制存储图片" OnClick="btnSend1_Click" /> </div> <br /> <br /> <br /> <div> <a href="#" mce_href="#" οnclick="OpenImages()" id="aa" runat="server"><font style="font-family: 宋体; font-size: 9pt;" mce_style="font-family: 宋体; font-size: 9pt;">查看附件</font></a><br /> <iframe id="ifm" runat="server"></iframe> </div> <br /> <br /> <br /> <div align="center"> <font style="font-family: 宋体; font-size: 9pt;" mce_style="font-family: 宋体; font-size: 9pt;">保存图片的两种方法介绍</font></div> <br /> <div> <font style="font-family: 宋体; font-size: 9pt;" mce_style="font-family: 宋体; font-size: 9pt;">一种是保存为二进制数据<br /> 优点:安全,便于管理和维护,对于图片的操作,如复制,转移等都很方便和快捷。 <br /> 缺点:文件的读取和保存直接来源于数据库,在读取和保存时相对较慢,因为中间需要和二进制流进行相互转换,数据库文件相对较大,存取数据量较大,存储比较占数据库空间。 <br /> <br /> 一种是保存图片路径 <br /> 优点:存取数据量小,读取速度较快。 <br /> 缺点:实体和文件分离的方式,服务器端还要有文件夹来保存这些图片(上传),所以一旦文件夹不小心丢失,所有图片就找不回了。</font> </div> </form></body></html> 后台文件: /*** 图片存储 ***/using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using FoxZip;using System.Text;using System.IO;using MicrosoftHelper;using System.Data.SqlClient;public partial class 图片二进制存储与读取_Default : BasePage{ protected void Page_Load(object sender, EventArgs e) { } //这种方法目前没有进行路径的入库操作 protected void btnSend_Click(object sender, EventArgs e) { StringBuilder sb = new StringBuilder(); int attCount = 0; string filePath = ""; for (int i = 0; i < Request.Files.Count; i++) { if (Request.Files[i].ContentLength > 0) { filePath = Request.Files[i].FileName; sb.Append("Files" + ++attCount + ": " + filePath + "<br>"); Request.Files[0].SaveAs(Server.MapPath("./") + filePath.Substring(filePath.LastIndexOf("//") + 1)); } } sb.Insert(0, "you upload " + attCount + " files.<br>"); Response.Write(sb.ToString()); } protected void btnSend1_Click(object sender, EventArgs e) { HttpPostedFile upImages = ImgUpload.PostedFile; //获取对由客户端制定的上载文件的访问 int ImagesLength = upImages.ContentLength; //获取上载文件的大小(以字节为单位) byte[] ImageArray = new byte[ImagesLength]; Stream ImageSream = upImages.InputStream; //获取一个Stream对象,该对象指向一个上载文件,以准备读取该文件的内容 ImageSream.Read(ImageArray, 0, ImagesLength); //读取文件 byte[] buffer = null; buffer = ZipHelper.ZipCompress(ImageArray); try { SqlParameter[] p = new SqlParameter[1]; p[0] = new SqlParameter("@UpdateImage", buffer); SqlHelper.ExecuteNonQuery(this.connStr, CommandType.StoredProcedure, "p_UpdateImage", p); } catch { AlertMessage("保存失败"); } finally { ImageSream.Close(); } }}