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;
}
}
}
本文介绍了一个使用ASP.NET实现的文件上传与下载功能的示例应用。该应用利用C#进行后台处理,并通过GridView展示文件信息。支持上传、下载及删除文件操作,并集成了JavaScript以增强用户体验。
1103

被折叠的 条评论
为什么被折叠?



