附件写进数据库及下载

来源:互联网 发布:linux curl post 编辑:程序博客网 时间:2024/06/06 08:32

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;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        SqlConnection myConn = new SqlConnection("server=192.168.123.63;database=SheduleBooking;Uid=sa;password='hew_tech96168'");
        myConn.Open();
        string strSql = "SELECT filesid,filename,filetype  from Files   order by FilesId asc ";
        SqlDataAdapter da = new SqlDataAdapter(strSql, myConn);
        DataSet ds = new DataSet();
        da.Fill(ds, "Files");
        GridView1.DataSource = ds;
        GridView1.DataBind();
        myConn.Close();
        myConn.Dispose();

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        bool filesValid = false;
        if (this.FileUpload1.HasFile) {
            String fileExtension = System.IO.Path.GetExtension(this.FileUpload1.FileName).ToLower();
                      String[] restrictExtension ={ ".doc", ".jpg", ".rar", ".ppt",".pdf" };
            for (int i = 0; i < restrictExtension.Length; i++)
            {
                if (fileExtension == restrictExtension[i])
                {
                    filesValid = true;
                 }

            }

            if (filesValid == true) {

                try
                {
            
                    SqlConnection myConn = new SqlConnection("server=192.168.123.63;database=SheduleBooking;Uid=sa;password='hew_tech96168'");
                    myConn.Open();
       
                  string path = Server.MapPath("upload/");//保存上传文件的文件夹upload虚拟路径对应的实际路径
                  string filePath = this.FileUpload1.PostedFile.FileName;//客户端文件的完全限定名
                  string serverPath = "2";// path + filePath.Substring(filePath.LastIndexOf("//") + 1);//上传的文件保存在服务器端的路径
                  string fileName =  filePath.Substring(filePath.LastIndexOf("//") + 1);//文件名
                  string fileType = this.FileUpload1.PostedFile.ContentType.ToString();//文件类型
                  System.IO.Stream streamFile = this.FileUpload1.PostedFile.InputStream;//建立数据流对象
                  int fileLength = this.FileUpload1.PostedFile.ContentLength;//文件长度以字节为单位
                  byte[] fileData = new Byte[fileLength];//新建一个数组
                  streamFile.Read(fileData, 0, fileLength);//将这个数据流读取到数组中
                    //方法1 调用存储过程的方法

                  //SqlCommand cmd = new SqlCommand("insertFile", myConn);//启用存储过程
                  //cmd.CommandType = CommandType.StoredProcedure;//指定类型
                  //cmd.Parameters.Add("@fileName", SqlDbType.VarChar, 200);
                  //cmd.Parameters["@fileName"].Value = fileName;
                  //cmd.Parameters.Add("@filePath", SqlDbType.VarChar, 300);
                  //cmd.Parameters["@filePath"].Value = serverPath;
                  //cmd.Parameters.Add("@fileType", SqlDbType.VarChar, 50);
                  //cmd.Parameters["@fileType"].Value = fileType;
                  //cmd.Parameters.Add("@fileData", SqlDbType.Image);
                  //cmd.Parameters["@fileData"].Value = fileData;
               
                    //方法2 使用带参数的sql方法
                  string strSql = "Insert into Files(fileData,fileName) values(@FImage,'"+fileName+"')";
                  SqlCommand cmd=new SqlCommand(strSql,myConn);
                  cmd.Parameters.Add("@FImage",SqlDbType.Image);
                  cmd.Parameters["@FImage"].Value = fileData;
                  cmd.ExecuteNonQuery();
                  Response.Write("上传成功");
                  myConn.Close();
                }
                catch (Exception ex){
                    Response.Write("上传失败!"+ex.Message);
                }
           
            }
       
        }
    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        string id = this.GridView1.DataKeys[e.RowIndex]["filesid"].ToString();
        Response.Write(id);
        Response.Write("开始下载");

        SqlConnection myConn = new SqlConnection("server=192.168.123.63;database=SheduleBooking;Uid=sa;password='hew_tech96168'");
        myConn.Open();

        string sql = "select * from Files where filesid='" + id + "'";
        SqlCommand cmd = new SqlCommand(sql, myConn);
        SqlDataReader sdr = cmd.ExecuteReader();
        sdr.Read();
        Response.Buffer = true;
        Page.Response.Clear();//清除缓冲区所有内容
        Page.Response.ContentType = "application/octet-stream";
        //              Page.Response.AddHeader("Content-Type",sdr["fileType"].ToString());
        Page.Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(sdr["fileName"].ToString(), System.Text.Encoding.UTF8));
        byte[] file = (Byte[])sdr["fileData"];//读出数据
       // int a = file.Length;
         Response.BinaryWrite(file);
         Response.Flush();
         Response.End();
         sdr.Close();
         myConn.Close();


    }
}

 

//----------------------页面代码-- ---------------

 

<%@ 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>
<script language="javascript" type="text/javascript">
// <!CDATA[

function Button1_onclick() {

}

// ]]>
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" /><br />
        <br />
        <asp:Label ID="LabFile" runat="server"  Text="Label"></asp:Label><br />
        <br />
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="filesid" OnRowDeleting="GridView1_RowDeleting">
            <Columns>
                <asp:BoundField DataField="filesid" HeaderText="文件ID" />
                <asp:BoundField DataField="filename" HeaderText="文件名称" />
                <asp:BoundField DataField="filetype" HeaderText="文件类型" />
                <asp:CommandField ShowDeleteButton="True"  HeaderText="下载" DeleteText="下载"/>
            </Columns>
        </asp:GridView>
        </div>
    </form>
</body>
</html>

 

//---------------------存储过程-----------------

create procedure  insertFile
@fileName varchar(200),
@filePath varchar(300),
@fileType varchar(50),
@fileData image
as
insert into Files(fileName,filePath,fileType,fileData)
values(@fileName,@filePath,@fileType,@fileData)