62,046
社区成员
发帖
与我相关
我的任务
分享
//FileUploadDatabase.aspx
<%@ Page Language="C#" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
bool CheckFileType(string fileName)
{
return Path.GetExtension(fileName).ToLower() == ".doc";
}
protected void btnAdd_Click(object sender, EventArgs e)
{
if (upFile.HasFile)
{
if(CheckFileType(upFile.FileName))
{
srcFiles.Insert();
}
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>把文件保存到数据库</title>
<style type="text/css">
.fileList li
{
margin-bottom:5px;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblFile" runat="server" AssociatedControlID="upFile" Text="Word Document:"></asp:Label> <asp:FileUpload
ID="upFile" runat="server" /><br />
<br />
<asp:Button ID="btnAdd" runat="server" OnClick="btnAdd_Click" Text="Add Document" />
<hr />
<asp:Repeater ID="rptFiles" runat="server" DataSourceID="srcFiles">
<HeaderTemplate>
<ul class="fileList">
</HeaderTemplate>
<ItemTemplate>
<li>
<asp:HyperLink
id="lnkFile"
text='<%# Eval("FileName") %>'
navigateUrl='<%# Eval("Id","~/FileHandler.ashx?id={0}") %>'
Runat="server" />
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
<asp:SqlDataSource ID="srcFiles" runat="server" ConnectionString="<%$ ConnectionStrings:FilesDBConnectionString %>"
SelectCommand="SELECT [Id], [FileName] FROM [Files]" InsertCommand="INSERT INTO Files(FileName, FileBytes) VALUES (@FileName, @FileBytes)">
<InsertParameters>
<asp:ControlParameter Name="FileName" ControlID="upFile" PropertyName="FileName" />
<asp:ControlParameter Name="FileBytes" ControlID="upFile" PropertyName="FileBytes" />
</InsertParameters>
</asp:SqlDataSource>
</div>
</form>
</body>
</html>
//FileHandler.ashx
<%@ WebHandler Language="C#" Class="FileHandler" %>
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class FileHandler : IHttpHandler {
const string conString = @"Data Source=87F7FD51AF744A5;Initial Catalog=FilesDB;Integrated Security=True";
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "application/msword";
SqlConnection con = new SqlConnection(conString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT FileBytes FROM Files WHERE Id=@Id";
cmd.Parameters.AddWithValue("@Id", context.Request["Id"]);
using (con)//用try catch也是可以的
{
con.Open();
byte[] file = System.Text.Encoding.Unicode.GetBytes(cmd.ExecuteScalar().ToString());
context.Response.BinaryWrite(file);
}
}
public bool IsReusable {
get {
return false;
}
}
}