将图片保存到数据库中并下载[原]

本文详细介绍如何使用ASP.NET实现图片的上传与下载功能。包括创建数据库、表结构设计、编写网页代码及后台处理逻辑等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个功能是我们常用的,但我发现网上参考资料好像并不多,有也不够全.我想我能写全一点吧?供我们的程序员提供一个方便.

首先我们要建立一个数据库和表:
1. --创建存储图片的数据库

CREATE   DATABASE   [ Tom_Hu ]   ON  (NAME  =  N ' Tom_Hu_Data ' , FILENAME  =  N ' d:Program FilesMicrosoft SQL ServerMSSQLdataTom_Hu_Data.MDF '  , SIZE  =   1 , FILEGROWTH  =   10 % LOG   ON  (NAME  =  N ' Tom_Hu_Log ' , FILENAME  =  N ' d:Program FilesMicrosoft SQL ServerMSSQLdataTom_Hu_Log.LDF '  , SIZE  =   1 , FILEGROWTH  =   10 % )
COLLATE Chinese_PRC_CI_AS
GO

       2. --建立一个存储图片的表 

    CREATE   TABLE   [ Images ]  (
[ id ]   [ int ]   IDENTITY  ( 1 1 NOT   NULL  ,
[ ImageName ]   [ varchar ]  ( 64 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
[ Images ]   [ image ]   NOT   NULL  ,
[ ImageSize ]   [ int ]   NULL  
ON   [ PRIMARY ]  TEXTIMAGE_ON  [ PRIMARY ]
GO  

3.建立一个名为 ImageTest 的asp.net网站

4.在Default.aspx文件中加入以下代码:


<% @ 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 >
    
< link  href ="css.css"  rel ="stylesheet"  type ="text/css"   />
</ head >
< body  style ="text-align: left" >
    
< form  id ="form1"  runat ="server" >
    
< div >
        
< table  style ="border-right: #3333ff thin solid; border-top: #3333ff thin solid; border-left: #3333ff thin solid; border-bottom: #3333ff thin solid;" >
            
< tr >
                
< td  colspan ="2" >
                    
< asp:FileUpload  ID ="UpFileControl"  runat ="server"   /></ td >
            
</ tr >
            
< tr >
                
< td  style ="text-align: center" >
                    
< asp:Button  ID ="BT_UpFile"  runat ="server"  Text ="上传"  OnClick ="BT_UpFile_Click"   /></ td >
                
< td  style ="text-align: center" >
                    
< asp:Button  ID ="BT_Down"  runat ="server"  Text ="下载"  OnClick ="BT_Down_Click"   /></ td >
            
</ tr >
        
</ table >
    
</ div >
    
</ form >
</ body >
</ html >

 

5.在配置文件Web.config中写入:

<? xml version="1.0" ?>
<!--  
    注意: 除了手动编辑此文件以外,您还可以使用 
    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
     “网站”->“Asp.Net 配置”选项。
    设置和注释的完整列表在 
    machine.config.comments 中,该文件通常位于 
    WindowsMicrosoft.NetFrameworkv2.xConfig 中
-->
< configuration >
< appSettings />
< connectionStrings >
   
< add  name ="databasecon"  connectionString ="Data Source=.;Initial Catalog=Tom_Hu;Persist Security Info=True;User ID=sa;Password=sa"  providerName ="System.Data.SqlClient" />
</ connectionStrings >
< system .web >
   
<!--  
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会 
            影响性能,因此只在开发过程中将此值 
            设置为 true。
        
-->
   
< compilation  debug ="true" />
   
<!--
            通过 <authentication> 节可以配置 ASP.NET 使用的 
            安全身份验证模式,
            以标识传入的用户。 
        
-->
   
< authentication  mode ="Windows" />
   
<!--
            如果在执行请求的过程中出现未处理的错误,
            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
            开发人员通过该节可以配置
            要显示的 html 错误页
            以代替错误堆栈跟踪。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        
-->
</ system.web >
</ configuration >


6.在Default.aspx.cs文件中写上:

 

 

using  System;
using  System.Data;
using  System.Configuration;
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  System.Data.SqlClient;
using  System.IO;


/// <summary>
/// 作者:三少爷
/// 日期:2007-11-14
/// </summary>

public   partial   class  _Default : System.Web.UI.Page 
{
    
protected int imageSize;
    
protected byte[] imageBody;
    
protected string SqlCom = "";
    SqlConnection con 
= new SqlConnection();
    SqlCommand cmd 
= new SqlCommand();

    
protected void Page_Load(object sender, EventArgs e)
    
{
        
//创建数据库链接对象
        con = new SqlConnection(ConfigurationManager.ConnectionStrings["databasecon"].ToString());
    }


    
//图片上传
    protected void BT_UpFile_Click(object sender, EventArgs e)
    
{
        
string imagePath;
        
string imageType;
        
string imageName;
        
if (UpFileControl.PostedFile.FileName != "")
        

            
//取得选择的图片路径
            imagePath = UpFileControl.PostedFile.FileName;
            
//取得选择的图片扩展名
            imageType = imagePath.Substring(imagePath.LastIndexOf("."+ 1);
            
//取得选择的图片名
            imageName = imagePath.Substring(imagePath.LastIndexOf("/"+ 1);

            
if ("jpg" != imageType && "gif" != imageType)
            
{
                Response.Write(
"对不起!请您选择JPG或者GIF格式的图片!");
                
return;
            }

            
else
            

                
//建立访问客户端上传文件的对象
                HttpPostedFile SendImage = UpFileControl.PostedFile;
                
//取得图片的大小
                imageSize = SendImage.ContentLength;
                imageBody 
= new Byte[imageSize];
                
//建立数据流对象
                Stream StreamObject = SendImage.InputStream;
                
//把图像数据放到imageBody中,其中0代表数据指针位置,ImageSize代表要读取的流的长度
                StreamObject.Read(imageBody, 0, imageSize);
                SqlCom 
= "insert into Images(ImageName,Images,ImageSize,imgtype) VALUES(@ImageName,@Images,@ImageSize,@imgtype) ";  // '" + imageName + "','" + imageBody + "','" + imageSize.ToString() + "','" + imageType + "')";
                cmd = new SqlCommand(SqlCom,con);
                cmd.Parameters.AddWithValue(
"@ImageName", imageName);//@Images,@ImageSize,@imgtype
                cmd.Parameters.AddWithValue("@Images", imageBody);
                cmd.Parameters.AddWithValue(
"@ImageSize", imageSize);
                cmd.Parameters.AddWithValue(
"@imgtype", imageType);
                con.Open();
                
try
                
{
                    cmd.ExecuteNonQuery();
                    Response.Write(
"成功!");
                }

                
catch
                
{
                    Response.Write(
"失败!");
                }

                
finally
                
{
                    con.Close();
                }

            }

        }

    }


    
//图片下载
    protected void BT_Down_Click(object sender, EventArgs e)
    
{
        SqlCom 
= "select top 1 * from images order by id desc";
        cmd 
= new SqlCommand(SqlCom, con);
        con.Open();
        SqlDataReader myreader 
= cmd.ExecuteReader();
        myreader.Read();
        
//设置页面缓冲输出
        Response.Buffer = true;
        
//清除缓冲区中的所有内容
        Response.Clear();
        
//设置输出流的类型
        Response.ContentType = "gif";
        
//为输出流添加HTTP头信息,在这里用图片的名称作为下载的文件名称
        Response.AddHeader("Content-Disposition""attachment;filename=" +HttpUtility.UrlEncode( myreader["imagename"].ToString(), System.Text.Encoding.GetEncoding("UTF-8")) +";");

        
byte[] file = (byte[])myreader["images"];
        
//把二进制字符串写入HTTP输出流
        Response.Write(file);
        
//向客户端发送所有缓冲的内容
        Response.Flush();
        
////将当前所有缓冲的输出发送到客户端,并停止该页的执行
        Response.End();
        con.Close();
        myreader.Close();
    }


    
protected void Button1_Click(object sender, EventArgs e)
    
{
        Image1.ImageUrl 
= "ShowImg.aspx";
    }

}

 

也许我写得很麻烦很啰嗦,但我相信这对初学者是有用的.
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值