using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.IO;
using Uestc.News.Data;namespace Uestc.News.Admin
{
/// <summary>
/// UploadImage 的摘要说明。
/// Tested by Sunmast at 26,Nov,2003,18:12
/// </summary>
public class UploadFile : Common
{
protected System.Web.UI.WebControls.Literal existImages;
protected System.Web.UI.HtmlControls.HtmlInputButton useCurrent;
protected System.Web.UI.HtmlControls.HtmlInputButton cancel;
private System.Web.HttpPostedFile oFile;
private string name;
private int size; private void Page_Load(object sender, System.EventArgs e)
{
oFile = Request.Files.Get("FCKeditor_File") ;
if(oFile == null)
return;
else
Session["imgFile"] = oFile; // 检查数据库是否已记录可能重复的文件
size = oFile.ContentLength;
name = oFile.FileName;
name = name.Remove(0,name.LastIndexOf('\\') + 1); SqlConnection conn = Data.Common.GetConn();
string sqlQuery = "SELECT * FROM Image WHERE FileSize = " + size.ToString() + " OR FileName = '" + name + "'";
DataRowCollection drc = News.Data.SqlHelper.ExecuteDataset(conn,CommandType.Text,sqlQuery).Tables[0].Rows;
conn.Close(); if(drc.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach(DataRow dr in drc)
{
int X = Convert.ToInt32(dr["Width"]);
int Y = Convert.ToInt32(dr["Height"]);
float yx = (float)Y / (float)X;
if(yx > 0.75)
{
if(Y > 300)
{
Y = 300;
X = (int)System.Math.Round(Y / yx);
}
}
else
{
if(X > 400)
{
X = 400;
Y = (int)System.Math.Round(X * yx);
}
}
sb.Append("<a href=\"javascript:getImage('" + dr["FilePath"].ToString() + "'," + X.ToString() + "," + Y.ToString() + ");\">" + dr["FileName"].ToString() + "</a><br/>");
}
existImages.Text = sb.ToString();
return;
}
else
{
SaveFile(oFile);
return;
}
} private void SaveFile(HttpPostedFile oFile)
{
// 保存文件并添加记录到数据库
size = oFile.ContentLength;
name = oFile.FileName;
name = name.Remove(0,name.LastIndexOf('\\') + 1);
string today = System.DateTime.Now.Date.ToString();
today = today.Substring(0,today.IndexOf(' ')); string sFileURL  = "/Data/Image/" + today + "/";
DirectoryInfo di = new DirectoryInfo(Server.MapPath(sFileURL));
if(!di.Exists)
di.Create(); sFileURL = sFileURL + System.DateTime.Now.TimeOfDay.ToString().Replace(":",".") + System.IO.Path.GetExtension(oFile.FileName);
string sFilePath = Server.MapPath(sFileURL);
oFile.SaveAs(sFilePath);
System.Drawing.Image img = System.Drawing.Image.FromFile(sFilePath);
int width = img.Width;
int height = img.Height;
img.Dispose(); SqlConnection conn = Data.Common.GetConn();
string sqlQuery = "INSERT INTO Image (FileName, FilePath, FileSize, Width, Height, UploadTime) VALUES ('" 
+ name + "', '" + sFileURL + "', " + size.ToString() + "," + width.ToString() + "," + height.ToString() + ", '" + System.DateTime.Now.ToString() + "')";
News.Data.SqlHelper.ExecuteNonQuery(conn,CommandType.Text,sqlQuery);
conn.Close();
Session["imgFile"] = null; Response.Write("<SCRIPT language=javascript>window.opener.setImage('" + sFileURL + "') ; window.close();</" + "SCRIPT>");
return;
} protected void useCurrentImg(object Source, EventArgs e)
{
SaveFile((HttpPostedFile)Session["imgFile"]);
return;
} protected void cancelAll(object Source, EventArgs e)
{
Session["imgFile"] = null;
Response.Write("<SCRIPT language=javascript>window.opener.setImage('') ; window.close();</" + "SCRIPT>");
return;
} #region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{    
this.Load += new System.EventHandler(this.Page_Load); }
#endregion
}
}

解决方案 »

  1.   

    <%@ Page language="c#" Codebehind="UploadFile.aspx.cs" AutoEventWireup="false" Inherits="Uestc.News.Admin.UploadFile" %>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="FCKeditor/css/fck_dialog.css">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>!</title>
    <SCRIPT language="javascript">
    var sActiveImage = "" ;function getImage(imageName,imgWidth,imgHeight)
    {
    sActiveImage = imageName ;
    imgPreview.src = sActiveImage ;
    imgPreview.width = imgWidth ;
    imgPreview.height = imgHeight ;
    }function ok()
    {
    window.opener.setImage(sActiveImage) ;
    window.close() ;
    }
    </SCRIPT>
    </head>
    <body>
    <center>探测到可能的文件重复</center>
    <hr width="100%" color="black" size="1"/>
    <table width="100%" height="80%">
    <tr height="100%" valign="top">
    <td width="160" align="top">
    <table width="100%" height="100%" bgcolor="infobackground">
    <tr height="22"><td align="center">[ 文件名或者文件大小相同 ]<hr width="100%"/></td></tr>
    <tr><td valign="top">
    <asp:Literal ID="existImages" Runat="server" />
    </td></tr></table>
    </td>
    <td width="400" height="300" bgcolor="white" align="center" valign="center">
    <img ID="imgPreview" src="" width="" height="" border="0"/>
    </td>
    <form id="upload" method="post" runat="server">
    </tr>
    </table>
    <hr width="100%" color="black" size="1"/>
    <center>
    <input type="button" value="使用选择的图片" onclick="ok();">
    <input id="useCurrent" type="button" value="使用新上传的图片" OnServerClick="useCurrentImg" runat="server">
    <input id="cancel" type="button" value="取消" OnServerClick="cancelAll" runat="server">
    </center>
    </body>
    </html>
    </form>
      

  2.   

    http://www.codeproject.com/aspnet/simpleuploadimage.asp?target=UPLOAD
    http://www.dotnetjunkies.com/Tutorial/AF08577B-3965-4497-A552-EA16D5582D8F.dcik
      

  3.   

    <!--
    * * * * * * * * * * * * * * * * * * * * * * * *         天天向上       * * * * * * * * * * * * * * * * * * * * * * * * * * *
    * if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[File]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) *
    * drop table [dbo].[File]
    * GO *
    *
    * CREATE TABLE [dbo].[File] ( *
    * [ID] [int] IDENTITY (1, 1) NOT NULL ,
    * [fileName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL , *
    * [fileType] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
    * [fileSize] [float] NULL , *
    * [fileContext] [image] NULL 
    * ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] *
    * GO
    * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    -->
    <%@ Page language="c#"%>
    <%@ Import Namespace="System.Data.SqlClient" %>
    <%@ Import Namespace="System.Web" %>
    <%@ Import Namespace="System.Web.UI" %>
    <%@ Import Namespace="System.Web.UI.WebControls" %>
    <%@ Import Namespace="System.Data" %>
    <script runat="server">
    override protected void OnInit(EventArgs e)
    {
    this.btUp.Click += new System.EventHandler(this.btUp_Click);
    this.DataGrid1.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_DeleteCommand);
    this.Load += new System.EventHandler(this.Page_Load);
    base.OnInit(e);
    }
    void Page_Load(object sender, System.EventArgs e)
    {
    this.btUp.Attributes.Add("onclick","loading.style.display='';document.body.enabled=true");
    if(Request["downFile"]!=null)//下载文件
    {
    string strFileID = Request["downFile"];
    SqlConnection conn = new SqlConnection("Data Source=localhost;database=test;user id=sa;password=");
    SqlDataAdapter adapt = new SqlDataAdapter("select * from [file] where id="+strFileID,conn);
    DataSet ds = new DataSet();
    adapt.Fill(ds);
    if(ds.Tables.Count!=0 && ds.Tables[0].Rows.Count!=0)
    {
    Response.ClearHeaders();
    Response.ClearContent();
    Response.AddHeader("Content-Disposition", "attachment; filename="+ds.Tables[0].Rows[0]["fileName"].ToString());
    byte[] context = (Byte[])ds.Tables[0].Rows[0]["fileContext"];
    Response.OutputStream.Write(context,0,context.Length);
    Response.End();
    }
    else
    {
    Response.Write("<font color=red>没有找到要下载的文件</font>");
    }
    }
    else //显示文件列表
    {
    ListFile();
    }
    }
    void ListFile()
    {
    SqlConnection conn = new SqlConnection("Data Source=localhost;database=test;user id=sa;password=");
    SqlDataAdapter adapt = new SqlDataAdapter("select * from [file]",conn);
    DataSet ds = new DataSet();
    adapt.Fill(ds);
    this.DataGrid1.DataSource = ds;
    this.DataGrid1.DataBind();
    }
    void btUp_Click(object sender, System.EventArgs e)
    {
    if(File.PostedFile!=null && File.PostedFile.ContentLength!=0)
    {
    int size = File.PostedFile.ContentLength;

    SqlConnection conn = new SqlConnection("Data Source=localhost;database=test;user id=sa;password=");
    SqlCommand cmd = new SqlCommand("insert into [file] (fileName,fileType,fileSize,fileContext) values(@fileName,@fileType,@fileSize,@fileContext)",conn);
    //文件名
    SqlParameter param = new SqlParameter("@fileName",SqlDbType.VarChar,50);
    param.Value = File.PostedFile.FileName.Substring(File.PostedFile.FileName.LastIndexOf("\\")+1);
    cmd.Parameters.Add(param);
    //文件类型
    param = new SqlParameter("@fileType",SqlDbType.VarChar,50);
    param.Value = File.PostedFile.ContentType;
    cmd.Parameters.Add(param);
    //文件大小
    param = new SqlParameter("@fileSize",SqlDbType.Float,8);
    param.Value = size;
    cmd.Parameters.Add(param);
    //文件内容
    byte[] context = new Byte[size];
    param = new SqlParameter("@fileContext",SqlDbType.Image);
    File.PostedFile.InputStream.Read(context,0,size);
    param.Value = context;
    cmd.Parameters.Add(param); conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();

    ListFile();
    }
    else
    {
    Response.Write("<font color=red>上传文件为空</font>");
    }
    }
    void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    SqlConnection conn = new SqlConnection("Data Source=localhost;database=test;user id=sa;password=");
    SqlCommand cmd = new SqlCommand("delete [file] where id = @id",conn);
    SqlParameter param = new SqlParameter("@id",SqlDbType.Int);
    param.Value = e.Item.Cells[0].Text;
    cmd.Parameters.Add(param);
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close(); ListFile();
    }
    </script>
    <HTML>
    <HEAD>
    <title>通用上传下载--支持所有格式文件</title>
    </HEAD>
    <body>
    <form id="WebForm5" method="post" runat="server" enctype="multipart/form-data">
    <input id="File" type="file" runat="server">
    <asp:button id="btUp" runat="server" Text="上  传"></asp:button><asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False">
    <HeaderStyle BackColor="#669966"></HeaderStyle>
    <Columns>
    <asp:BoundColumn DataField="ID" HeaderText="ID">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="fileName" HeaderText="文件名">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="fileType" HeaderText="文件类型">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    </asp:BoundColumn>
    <asp:BoundColumn DataField="fileSize" HeaderText="文件大小">
    <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    </asp:BoundColumn>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:HyperLink Text="下载" NavigateUrl='<%# String.Format("{0}?downFile={1}",Request.CurrentExecutionFilePath,DataBinder.Eval(Container.DataItem,"ID"))%>' Runat="server">
    </asp:HyperLink>
    </ItemTemplate>
    </asp:TemplateColumn>
    <asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
    </Columns>
    </asp:datagrid></form>
    <div id="loading" style="display:none;border-left:1px solid #EEEEEE;border-top:1px solid #EEEEEE;border-right:1px solid #666666;border-bottom:1px solid #666666;background-color:#DDDDDD;width:300px;heigth:200px;text-align:center">
    正在进行操作,请稍候……
    </div>
    </body>
    </HTML>
      

  4.   

    1.在页面上放置一个Html控件 FileField(也就是input type ="File")
    2.右键点击 -》做为服务器控件运行(假设名字叫OFD)if(this.OFD.Value == null || this.OFD.Value.Trim() == "")
    return;
    byte[] b_File = new byte[this.OFD.PostedFile.ContentLength];
    System.IO.Stream s_File = this.OFD.PostedFile.InputStream;
    s_File.Read(b_File,0,this.OFD.PostedFile.ContentLength);//这时已经将图片文件读入服务器内存变量 b_File中,然后就可以保存到数据库中了,比如
    建立DataSet.DataTable的NewRow();
    new_Row["XXX"] = b_File;
    然后调用SqlDataAdapter update Dataset 就可以了,
    但是如果图片文件十分巨大,将会很占用服务器的内存,看看别人还有没有更好的方法!