`

C#从数据库中上传下载附件功能

阅读更多

Page代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo1.aspx.cs" Inherits="order.Demo.Demo1" %>

<!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>Demo1</title>
    <script type="text/javascript" src="../js/jquery-1.6.2.min.js"></script>
    <script type="text/javascript" src="../js/Global.js"></script>
    <script type="text/javascript" src="../js/Calendar.js"></script>
    <link type="text/css" rel="Stylesheet" href="../css/Default.css" />
</head>
<body>
    <form id="form1" runat="server">
    <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        BackColor="White" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" 
        CellPadding="3" GridLines="Horizontal" Width="100%" 
        onrowdatabound="GridView1_RowDataBound" 
        onrowcommand="GridView1_RowCommand" CssClass="text">
        <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
        <Columns>
            <asp:TemplateField HeaderText="选择">
                <ItemTemplate>
                    <input ID="RadioLine" name="RadioLine" type="radio" value="<%#Eval("accessory_id")%>" />
                </ItemTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>
            <asp:BoundField DataField="accessory_id" HeaderText="附件ID" />
            <asp:BoundField DataField="order_header_id" HeaderText="订单ID" />
            <asp:BoundField DataField="accessory_name" HeaderText="附件名称" />
            <asp:BoundField DataField="accessory_description" HeaderText="附件说明" />
            <asp:BoundField DataField="creation_date" DataFormatString="{0:d}" HeaderText="创建日期" />
            <asp:BoundField DataField="created_by" HeaderText="创建人" />
            <asp:BoundField DataField="accessory_size" HeaderText="文件大小" />
            <asp:BoundField DataField="accessory_type" HeaderText="文件类型" />
            <asp:ButtonField CommandName="DownItem" HeaderText="下载" ShowHeader="True" Text="下载" >
            <ItemStyle HorizontalAlign="Center" />
            </asp:ButtonField>
            <asp:ButtonField CommandName="DelItem" HeaderText="删除" ShowHeader="True" Text="删除" >
            <ItemStyle HorizontalAlign="Center" />
            </asp:ButtonField>
        </Columns>
        <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />
        <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />
        <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />
        <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />
        <AlternatingRowStyle BackColor="#F7F7F7" />
    </asp:GridView>
    <asp:FileUpload ID="FileUpload1" runat="server" ToolTip="附件上传" />
    <asp:Button ID="BtnUpload" runat="server" Text="上传" OnClick="BtnUpload_Files"  />
    <input type="hidden" id="hidden_id" runat=server/> 
    </form>
</body>
</html>

<script language="javascript" type="text/javascript">
    // 注销
    function fn_DelItem(cellstring) {
        if (!confirm("确定要删除附件吗?")) {
            return false;
        }
        return true;
    }

    // 注销
    function fn_DownItem(cellstring) {
        return true;
    }

</script>

 C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Text;
using System.IO;
using System.Data.OracleClient;
using order.Components;
using order.commons;

namespace order.Demo
{
    public partial class Demo1 : System.Web.UI.Page
    {
        private Database db = new Database();

        protected void Page_Load(object sender, EventArgs e)
        {
            // 注册单选按钮
            if (!this.IsStartupScriptRegistered("Startup"))
            {
                this.RegisterStartupScript("Startup", RegisterScript.RadioRowSelected(hidden_id.ClientID));
            }
            if(!Page.IsPostBack)
            { 
                StringBuilder sqlBuilder = new StringBuilder();
                sqlBuilder.Append("select oa.accessory_id, oa.order_header_id, oa.accessory_name,oa.accessory_description, ");
                sqlBuilder.Append("oa.creation_date, oa.created_by, oa.accessory_size, oa.accessory_type ");
                sqlBuilder.Append("from oe_accessories oa ");
                sqlBuilder.Append("where 1 = 1 ");
                DataSet ds = db.returnds(sqlBuilder.ToString());
                this.GridView1.DataSource = ds.Tables[0].DefaultView;
                this.GridView1.DataBind();
            }
        }

        /// <summary>
        /// 测试上传文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void BtnUpload_Files(object sender, EventArgs e)
        {
            string fileName = "";// 文件名
            string filePath = "";// 文件路径
            string fileType = "";// 文件类型
            string accessory_id = "";
            int fileSize = 0; // 文件大小
            Stream fis;// 上传文件流
            StringBuilder sqlBuilder = new StringBuilder();
            sqlBuilder.Append("insert into oe_accessories oa ( ");
            sqlBuilder.Append("accessory_id,order_header_id,accessory_name,accessory_description, ");
            sqlBuilder.Append("accessory_data,creation_date,created_by,oa.accessory_size,oa.accessory_type ) ");
            sqlBuilder.Append("values( ");
            sqlBuilder.Append(":accessory_id,:order_header_id,:accessory_name,:accessory_description, ");
            sqlBuilder.Append(":accessory_data,:creation_date,:created_by,:accessory_size,:accessory_type ) ");
            // 设置参数
            OracleParameter[] orclParams = new OracleParameter[]
            {
                new OracleParameter("accessory_id", OracleType.VarChar),
                new OracleParameter("order_header_id", OracleType.VarChar),
                new OracleParameter("accessory_name", OracleType.VarChar),
                new OracleParameter("accessory_description", OracleType.VarChar),
                new OracleParameter("accessory_data", OracleType.Blob),
                new OracleParameter("creation_date", OracleType.DateTime),
                new OracleParameter("created_by", OracleType.VarChar),
                new OracleParameter("accessory_size", OracleType.Int32),
                new OracleParameter("accessory_type", OracleType.VarChar)
            };
            HttpFileCollection hfc = Request.Files;// 获取上载文件集合
            // 循环获取单个上载文件
            for (int i = 0; i < hfc.Count; i++)
            {
                HttpPostedFile hpf = hfc.Get(i);
                fileName = Path.GetFileName(hpf.FileName);
                filePath = Path.GetDirectoryName(hpf.FileName);
                fileType = Path.GetExtension(hpf.FileName).ToLower();
                fileName = fileName.Substring(0, (fileName.LastIndexOf(".")));
                // 获取文件流大小
                fileSize = hpf.ContentLength;
                if (fileSize < 1)
                {
                    return;
                } 
                // 声明等长byte数组
                byte[] buffers = new byte[fileSize];
                // 获取文件流
                fis = hpf.InputStream;
                // 文件保存到缓存
                fis.Read(buffers, 0, fileSize);
                accessory_id = db.SequencesGenerator("SEQ_OE_ACCESSORIES");
                orclParams[0].Value = accessory_id;
                orclParams[1].Value = "";
                orclParams[2].Value = fileName;
                orclParams[3].Value = fileName;
                orclParams[4].Value = buffers;
                orclParams[4].Size = buffers.Length;
                orclParams[5].Value = DateTime.Now.ToShortDateString();
                orclParams[6].Value = "";
                orclParams[7].Value = fileSize;
                orclParams[8].Value = fileType;
                db.RunOracleCommand(sqlBuilder.ToString(), orclParams);
                MessageBox msg = new MessageBox(this);
                msg.Show("文件上传成功!");
                msg.RefreshUrl("../Demo/Demo1.aspx");
            }
        }

        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            // 改变背景颜色
            if (e.Row.RowType == DataControlRowType.Header)
            {
                //
            }
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Attributes.Add("onclick", "fn_RadioRowSingle(this,event)");
                e.Row.Attributes.Add("class", e.Row.RowIndex % 2 == 0 ? "rowOdd" : "rowEven");
                e.Row.Attributes.Add("oldClass", e.Row.RowIndex % 2 == 0 ? "rowOdd" : "rowEven");
                e.Row.Attributes.Add("onmouseover", "lastBackgroundColor=this.className;this.className='rowCurrent'");
                e.Row.Attributes.Add("onmouseout", "this.className=lastBackgroundColor;");
                // 绑定按钮
                int CellsCount = e.Row.Cells.Count;
                LinkButton BtnDownItem = e.Row.Cells[CellsCount - 2].Controls[0] as LinkButton;
                LinkButton BtnDelItem = e.Row.Cells[CellsCount - 1].Controls[0] as LinkButton;
                string RowCells = "role_id=" + e.Row.Cells[1].Text.Trim();
                BtnDownItem.Attributes.Add("onclick", "return fn_DownItem('" + RowCells + "');");
                BtnDelItem.Attributes.Add("onclick", "return fn_DelItem('" + RowCells + "');");
            }
        }

        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            // 删除
            if (e.CommandName == "DelItem")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                GridViewRow row = this.GridView1.Rows[index];
                string accessory_id = row.Cells[1].Text.Trim();
                List<String> BatchSQL = new List<String>();
                string newSQL = "delete from oe_accessories oa where 1 = 1 and oa.accessory_id = '" + accessory_id + "' ";
                BatchSQL.Add(newSQL);
                db.RunOracleCommandBatch(BatchSQL);
                MessageBox msg = new MessageBox(this);
                msg.Show("文件删除成功!");
                msg.RefreshUrl("../Demo/Demo1.aspx");
            }
            // 下载-直接下载文件流
            if (e.CommandName == "DownItemTest")
            {
                try
                {
                    int index = Convert.ToInt32(e.CommandArgument);
                    GridViewRow row = this.GridView1.Rows[index];
                    string accessory_id = row.Cells[1].Text.Trim();
                    // 取出后写到一个文件中
                    FileStream fos;
                    // 以二进制形式将基元类型写入流
                    BinaryWriter writer;
                    int bufferSize = 1024;
                    // 该字节的BLOB缓冲区,以填补getbytes 
                    byte[] bytes = new byte[bufferSize];
                    long retval;
                    long startIndex = 0;
                    string fileName = "";
                    StringBuilder sqlBuilder = new StringBuilder();
                    sqlBuilder.Append("select oa.accessory_name,oa.accessory_data from oe_accessories oa where 1 = 1 and oa.accessory_id ='").Append(accessory_id).Append("' ");
                    OracleDataReader dr = db.returndr(sqlBuilder.ToString());
                    while (dr.Read())
                    { 
                        // 读文件名
                        fileName = dr["accessory_name"].ToString();
                        // 创建一个文件
                        fos = new FileStream(Path.GetTempPath() + fileName, FileMode.OpenOrCreate, FileAccess.Write);
                        writer = new BinaryWriter(fos);
                        startIndex = 0;
                        retval = dr.GetBytes(1, startIndex, bytes, 0, bufferSize);
                        while (retval == bufferSize)
                        {
                            writer.Write(bytes);
                            writer.Flush();
                            startIndex += bufferSize;
                            retval = dr.GetBytes(1, startIndex, bytes, 0, bufferSize);
                        }
                        writer.Write(bytes, 0, (int)retval);
                        writer.Flush();
                        // 释放资源
                        writer.Close();
                        fos.Close();
                    }
                }
                catch (Exception ex)
                {
                    order.SystemError.SystemLog(ex.Message);
                }
                finally
                {
                    db.Close();
                }
            }
            // 下载-显示打开和保存
            if (e.CommandName == "DownItem")
            {
                try
                {
                    int index = Convert.ToInt32(e.CommandArgument);
                    GridViewRow row = this.GridView1.Rows[index];
                    string accessory_id = row.Cells[1].Text.Trim();
                    // 取出后写到一个文件中
                    FileStream fos;
                    // 以二进制形式将基元类型写入流
                    BinaryWriter writer;
                    int fileSize = 1024;
                    long retval;
                    long startIndex = 0;
                    string fileName = "";
                    string fileType = "";
                    StringBuilder sqlBuilder = new StringBuilder();
                    sqlBuilder.Append("select oa.accessory_name,oa.accessory_data,oa.accessory_size,oa.accessory_type ");
                    sqlBuilder.Append("from oe_accessories oa where 1 = 1 and oa.accessory_id ='").Append(accessory_id).Append("' ");
                    OracleDataReader dr = db.returndr(sqlBuilder.ToString());
                    while (dr.Read())
                    {
                        // 读文件名
                        fileName = dr["accessory_name"].ToString();
                        fileSize = int.Parse(dr["accessory_size"].ToString());
                        fileType = dr["accessory_type"].ToString();
                        // 该字节的BLOB缓冲区,以填补getbytes 
                        byte[] bytes = new byte[fileSize];
                        // 创建一个文件
                        fos = new FileStream(Path.GetTempPath() + fileName, FileMode.OpenOrCreate, FileAccess.Write);
                        writer = new BinaryWriter(fos);
                        startIndex = 0;
                        retval = dr.GetBytes(1, startIndex, bytes, 0, fileSize);
                        while (retval == fileSize)
                        {
                            writer.Write(bytes);
                            writer.Flush();
                            startIndex += fileSize;
                            retval = dr.GetBytes(1, startIndex, bytes, 0, fileSize);
                        }
                        writer.Write(bytes, 0, (int)retval);
                        writer.Flush();
                        // 释放资源
                        writer.Close();
                        fos.Close();
                        this.Response.Clear();
                        Response.ClearHeaders();
                        Response.Buffer = false;
                        string ct = this.DownFile_ContentType(fileType);
                        Response.ContentType = ct;
                        Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
                        Response.AppendHeader("Content-Length", bytes.Length.ToString());
                        Response.BinaryWrite(bytes); //二进制文件
                        Response.Flush();
                        Response.End();
                    }
                }
                catch (Exception ex)
                {
                    order.SystemError.SystemLog(ex.Message);
                }
                finally
                {
                    db.Close();
                }
            }
        }
        
        /// <summary>
        /// 下载文件类型
        /// </summary>
        /// <param name="fileType"></param>
        /// <returns></returns>
        protected string DownFile_ContentType(string fileType)
        {
            string result = "";
            try
            {
                StringBuilder sqlBuilder = new StringBuilder();
                sqlBuilder.Append("select pc.type_description from params_codelist pc ");
                sqlBuilder.Append("where 1 = 1 ");
                sqlBuilder.Append("and pc.kind_code = 'CONTENT_TYPE' ");
                sqlBuilder.Append("and pc.type_value = '").Append(fileType).Append("' ");
                OracleDataReader dr = db.returndr(sqlBuilder.ToString());
                while (dr.Read())
                {
                    result = dr["type_description"].ToString().Trim();
                }
                
            }
            catch (Exception ex)
            {
                order.SystemError.SystemLog(ex.Message);
            }
            finally
            {
                db.Close();
            }
            if(result.Length <= 0 )
            {
                result = "text/plain";
            }
            return result;
        }
    }
}

 

 

 

  • 大小: 7.6 KB
分享到:
评论

相关推荐

    c#中上传下载文件到数据库的源代码

    在C#编程中,将文件上传到数据库以及从数据库下载文件是常见的操作,尤其是在构建Web应用程序时。这个源代码示例可能包含一个完整的Web站点项目(WebSite4),用于演示如何处理这种数据存储。以下是对这些关键知识点...

    aspnet(C#)实现从sqlserver数据库中下载以二进制存储的图片

    本教程将详细讲解如何从数据库中下载这些以二进制形式存储的图片。 首先,我们需要了解数据库中二进制数据的存储方式。在SQL Server中,通常使用`VARBINARY(MAX)`或`IMAGE`(已过时)数据类型来存储图片等二进制...

    C#实现附件上传和下载功能

    C#实现附件上传和下载功能 ...在实际应用中,C#实现附件上传和下载功能可以应用于各种场景,例如在线文档管理系统、电商平台、社交媒体等。同时,该功能也可以与其他功能相结合,例如文件处理、数据分析等。

    c#多附件上传源代码

    在C#编程中,多附件上传是一项常见的功能,特别是在Web应用程序和桌面应用中,例如电子邮件系统、文件分享平台或者在线协作工具。这个标题"多附件上传源代码"指的是一个实现该功能的C#代码示例,非常适合初学者学习...

    C#WEB上传控件,多附件上传

    总的来说,这个C# Web上传控件提供了一种方便的方式来实现多附件上传,使得开发者能够快速地在自己的Web应用中集成这一功能。尽管压缩包中没有包含完整的项目,但通过理解源代码和适当调整,你可以根据自己的项目...

    C# 图片上传读取下载到本地

    在C#编程中,图片的上传、读取和下载到本地是常见的操作,尤其是在Web应用或者桌面应用中。本项目采用C#语言实现,并结合了SQL Server 2005作为数据库来存储图片的元数据。以下是这个项目涉及的关键知识点: 1. **...

    jquery批量上传附件c#源码

    标题 "jquery批量上传附件c#源码" 描述了一个使用jQuery和C#技术实现的批量附件上传功能。这个功能在Web应用中非常常见,尤其是在需要用户上传多份文件的场景下,可以极大地提高用户体验。接下来,我们将深入探讨...

    C#三种上传附件的代码

    根据提供的标题、描述、标签及部分内容,我们可以梳理出与上传附件相关的三个主要知识点:文件类型判断、文件读取与处理以及文件数据存入数据库的方法。 ### 知识点一:文件类型判断 在进行文件上传时,首先要确保...

    C# MVC 上传多图案例

    在本文中,我们将深入探讨如何使用C# MVC框架实现多图上传功能,特别是在Uploadfly解决方案中的应用。C# MVC(Model-View-Controller)是一种广泛使用的Web应用程序开发模式,它鼓励代码分离,使得项目结构清晰,...

    C#使用listView增删操作实例

    总之,C#中的ListView控件是一个功能强大的组件,它提供了丰富的功能来展示和操作数据。通过学习和掌握ListView的增删操作,开发者可以更有效地构建出具备数据管理功能的桌面应用程序。在实际开发中,应结合具体业务...

    简单网站ASP.NET(C#)网站,有上传文件功能

    在这个"简单网站ASP.NET(C#)网站,有上传文件功能"的项目中,我们可以学习到如何使用C#编程语言在ASP.NET环境下实现文件上传的功能,这对于初学者来说是一个非常实用的实践案例。 首先,我们要了解ASP.NET中的...

    C#实现HTTP上传文件的方法

    在C#编程中,HTTP上传文件是常见的网络通信任务,特别是在Web应用开发中。通过HTTP协议,客户端(通常是用户浏览器或应用程序)可以将文件发送到服务器进行存储、处理或其他操作。这里我们将详细讨论如何使用C#实现...

    Oracle P/L SQL实现FTP上传、下载功能

    Oracle P/L SQL实现FTP上传、下载功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --Oracle上的FTP功能 Create or Replace Package UTL_FTP AUTHID CURRENT_USER as Type Connection ...

    简单附件上传c#源码

    本主题关注的是“简单附件上传”的实现,这是一个常见的Web应用功能,例如在论坛、邮件系统或者协作平台中,用户需要上传文件作为附件来分享或储存信息。 在C#中实现附件上传,主要涉及到HTTP协议的理解、表单提交...

    GridView中实现上传下载(个人修改版)

    在.NET开发环境中,GridView是...通过这个项目,我们可以学习到如何扩展和优化GridView的基本功能,以及如何在实际开发中处理文件上传下载、数据库操作和用户交互等问题。这些经验对于提升.NET Web开发技能非常有价值。

    ASP.NET多附件上传和附件编辑的实现

    总结,实现ASP.NET中的多附件上传和附件编辑功能涉及客户端与服务器端的交互、文件的存储与管理、数据库的设计以及用户界面的交互。这个过程中需要注意安全性、性能和用户体验的优化。通过以上步骤,你可以构建一个...

    c#上传大文件

    在C#中,上传大文件是一项常见的任务,特别是在开发...以上就是关于C#中实现大文件上传的相关知识点,无论是在WinForms还是ASP.NET环境中,理解并应用这些技术都是构建高效、稳定、用户体验良好的文件上传功能的关键。

    C#实现Excel表数据导入Sql Server数据库中的方法

    本文实例讲述了C#实现Excel表数据导入Sql Server数据库中的方法。分享给大家供大家参考,具体如下: Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1、首先,我们要先在test数据库中新建一...

    一套基于C#+SQL2000实现的商品销售管理系统(MSSQL)

    这个系统利用了C#编程语言的强大功能以及SQL Server 2000数据库的强大数据处理能力,为小型到中型企业提供了高效的库存管理和销售追踪工具。 【描述】该系统的核心是C#编程,它是一种面向对象的、类型安全的编程...

    ASP.NET_2.0(C#)实现多文件上传

    ASP.NET 2.0 使用 C# 实现多文件上传是一项常见的功能需求,尤其在Web应用程序中,例如在线文档管理系统、媒体分享平台等。这个功能可以让用户一次性上传多个文件,如图片、文档或视频,同时提供了对上传文件类型的...

Global site tag (gtag.js) - Google Analytics