在我们写程序的时候在很多地方都会用到附件上传。一个简单通用的附件上传方式可以有效的节省开发工作。
在这里我介绍一种比较通用的附件上传方式,和Exchange中的附件上传方式相似。
下面是运行的效果图:
先来看一下表结构:
Code
CREATE TABLE [dbo].[Com_TAttachments](
[FFileId] [varchar](40) COLLATE Chinese_PRC_CI_AS NOT NULL,--附件序号
[FTableName] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL,--主表名
[FPk] [int] NULL, --主表主键值
[FFileName] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, --附件名
[FExtension] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, --附件扩展名
[FContentType] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,--附件文件类型
[FContent] [image] NULL, --附件内容
[FSize] [bigint] NULL, --附件大小
[FRemark] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, --备注
[FCreateUserId] [int] NULL, --创建人
[FCreateDate] [datetime] NULL, --创建时间
)
CREATE TABLE [dbo].[Com_TAttachments](
[FFileId] [varchar](40) COLLATE Chinese_PRC_CI_AS NOT NULL,--附件序号
[FTableName] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL,--主表名
[FPk] [int] NULL, --主表主键值
[FFileName] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, --附件名
[FExtension] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, --附件扩展名
[FContentType] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,--附件文件类型
[FContent] [image] NULL, --附件内容
[FSize] [bigint] NULL, --附件大小
[FRemark] [varchar](255) COLLATE Chinese_PRC_CI_AS NULL, --备注
[FCreateUserId] [int] NULL, --创建人
[FCreateDate] [datetime] NULL, --创建时间
)
在这里我是将上传的文件保存到数据库中,当然如果开发的系统应用过程中上传的文件很多,很大,也可以保存上传文件路径的方式。
下面看一下附件上传页面:
Code
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" CodeBehind="UpLoadFile.aspx.cs" Inherits="YKSoft.OA.Pages.Attachment.UpLoadFile" %>
<!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>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">
<base target="_self" />
</head>
<body>
<form id="form1" runat="server">
<script type="text/javascript">
//返回的上传附件Id,临时保存的父窗口控件hidden的Id。
var IdControl="<%=IdControl %>";
//返回的上传附件名称,临时保存的父窗口控件DIV的Id
var NameControl="<%=NameControl %>";
//附加、删除
function addfile()
{
var ids=document.getElementById("<%=hidValue.ClientID %>").value;
var names=document.getElementById("<%=hidName.ClientID %>").value;
if(dialogArguments.doc.getElementById(NameControl)!=null)
dialogArguments.doc.getElementById(NameControl).innerHTML =names;
if(dialogArguments.doc.getElementById(IdControl)!=null)
dialogArguments.doc.getElementById(IdControl).value =ids;
}
//确定
function ok()
{
addfile();
this.close();
}
</script>
<div>
<table width="100%">
<tr>
<td>
<asp:FileUpload ID="file" runat="server" Width="100%" /></td>
</tr>
<tr>
<td>
<table style="width:100%">
<tr>
<td style="width: 80%" valign="top">
</td>
<td align="center" style="width: 20%" valign="middle">
<asp:Button ID="btnUpLoad" runat="server" Text="附加" OnClick="btnUpLoad_Click" /></td>
</tr>
<tr>
<td style="width:80%" valign="top">
<asp:Panel ID="PlFile" runat="server" Height="150px" ScrollBars="Auto" Width="100%" BorderColor="Silver" BorderStyle="Solid" BorderWidth="1px">
<asp:CheckBoxList ID="cboFileList" runat="server">
</asp:CheckBoxList></asp:Panel>
</td>
<td style="width:20%" align="center" valign="middle">
<asp:Button ID="btnDel" runat="server" Text="删除" Enabled="False" OnClick="btnDel_Click" /><br />
<br />
<br />
<br />
<input id="btnOK" type="button" value="确定" onclick="ok();" /></td>
</tr>
</table>
<asp:HiddenField ID="hidValue" runat="server" />
<asp:HiddenField ID="hidName" runat="server" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" CodeBehind="UpLoadFile.aspx.cs" Inherits="YKSoft.OA.Pages.Attachment.UpLoadFile" %>
<!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>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="no-cache">
<meta http-equiv="Expires" content="-1">
<meta http-equiv="Cache-Control" content="no-cache">
<base target="_self" />
</head>
<body>
<form id="form1" runat="server">
<script type="text/javascript">
//返回的上传附件Id,临时保存的父窗口控件hidden的Id。
var IdControl="<%=IdControl %>";
//返回的上传附件名称,临时保存的父窗口控件DIV的Id
var NameControl="<%=NameControl %>";
//附加、删除
function addfile()
{
var ids=document.getElementById("<%=hidValue.ClientID %>").value;
var names=document.getElementById("<%=hidName.ClientID %>").value;
if(dialogArguments.doc.getElementById(NameControl)!=null)
dialogArguments.doc.getElementById(NameControl).innerHTML =names;
if(dialogArguments.doc.getElementById(IdControl)!=null)
dialogArguments.doc.getElementById(IdControl).value =ids;
}
//确定
function ok()
{
addfile();
this.close();
}
</script>
<div>
<table width="100%">
<tr>
<td>
<asp:FileUpload ID="file" runat="server" Width="100%" /></td>
</tr>
<tr>
<td>
<table style="width:100%">
<tr>
<td style="width: 80%" valign="top">
</td>
<td align="center" style="width: 20%" valign="middle">
<asp:Button ID="btnUpLoad" runat="server" Text="附加" OnClick="btnUpLoad_Click" /></td>
</tr>
<tr>
<td style="width:80%" valign="top">
<asp:Panel ID="PlFile" runat="server" Height="150px" ScrollBars="Auto" Width="100%" BorderColor="Silver" BorderStyle="Solid" BorderWidth="1px">
<asp:CheckBoxList ID="cboFileList" runat="server">
</asp:CheckBoxList></asp:Panel>
</td>
<td style="width:20%" align="center" valign="middle">
<asp:Button ID="btnDel" runat="server" Text="删除" Enabled="False" OnClick="btnDel_Click" /><br />
<br />
<br />
<br />
<input id="btnOK" type="button" value="确定" onclick="ok();" /></td>
</tr>
</table>
<asp:HiddenField ID="hidValue" runat="server" />
<asp:HiddenField ID="hidName" runat="server" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Code
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
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;
namespace YKSoft.OA.Pages.Attachment
{
public partial class UpLoadFile : YKSoft.Web.UI.Page.PageBase
{
YKSoft.OA.BLL.Common.ComTAttachments BLL_ComTAttachments = new YKSoft.OA.BLL.Common.ComTAttachments();
//父窗口保存附件Id字符串的控件Id
protected string IdControl = "";
//父窗口保存附件名称字符串的控件Id
protected string NameControl = "";
protected void Page_Load(object sender, EventArgs e)
{
if (Request["IdControl"] != null)
IdControl = Request["IdControl"].ToString();
if (Request["NameControl"] != null)
NameControl = Request["NameControl"].ToString();
if (!Page.IsPostBack)
{
//已经上传的附件Id字符串,如:1,3。中间以,分隔。
//此过程是在对已经上传的附件进行修改时运行。
if (Request["Ids"] != null)
{
string[] Ids = Request["Ids"].ToString().Split(',');
//获取已经上传的附件数据集
IList<YKSoft.OA.Model.Common.ComTAttachments> items = BLL_ComTAttachments.GetList(Ids);
//将已经上传的附件添加到附件列表中显示。
for (int i = 0; i < items.Count; i++)
{
cboFileList.Items.Add(new ListItem(items[i].FfileName, items[i].FfileId));
}
SetValueName();
}
}
}
/**//// <summary>
/// 上传附件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpLoad_Click(object sender, EventArgs e)
{
//是否选择了文件
if (file.HasFile)
{
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
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;
namespace YKSoft.OA.Pages.Attachment
{
public partial class UpLoadFile : YKSoft.Web.UI.Page.PageBase
{
YKSoft.OA.BLL.Common.ComTAttachments BLL_ComTAttachments = new YKSoft.OA.BLL.Common.ComTAttachments();
//父窗口保存附件Id字符串的控件Id
protected string IdControl = "";
//父窗口保存附件名称字符串的控件Id
protected string NameControl = "";
protected void Page_Load(object sender, EventArgs e)
{
if (Request["IdControl"] != null)
IdControl = Request["IdControl"].ToString();
if (Request["NameControl"] != null)
NameControl = Request["NameControl"].ToString();
if (!Page.IsPostBack)
{
//已经上传的附件Id字符串,如:1,3。中间以,分隔。
//此过程是在对已经上传的附件进行修改时运行。
if (Request["Ids"] != null)
{
string[] Ids = Request["Ids"].ToString().Split(',');
//获取已经上传的附件数据集
IList<YKSoft.OA.Model.Common.ComTAttachments> items = BLL_ComTAttachments.GetList(Ids);
//将已经上传的附件添加到附件列表中显示。
for (int i = 0; i < items.Count; i++)
{
cboFileList.Items.Add(new ListItem(items[i].FfileName, items[i].FfileId));
}
SetValueName();
}
}
}
/**//// <summary>
/// 上传附件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpLoad_Click(object sender, EventArgs e)
{
//是否选择了文件
if (file.HasFile)
{
作者: crested
- 该日志由 crested 于12年前发表在综合分类下,最后更新于 2012年03月03日.
- 转载请注明: 通用附件上传方法 | 学步园 +复制链接
抱歉!评论已关闭.