怎么打不开文件???

weiyiabout 2008-10-22 08:20:04
这里我写的是一个上传word文件到数据库中,并在页面显示链接,但是一点链接的话,选择打开文件,就提示开始下载我的处理程序FileHandler.ashx。不明白是怎么回事?麻烦大家帮忙看看啊。。。

//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;
}
}

}

...全文
70 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
weiyiabout 2008-10-22
  • 打赏
  • 举报
回复
谢谢
但是我程序的问题在
<ItemTemplate>
<li>
<asp:HyperLink
id="lnkFile"
text='<%# Eval("FileName") %>'
navigateUrl='<%# Eval("Id","~/FileHandler.ashx?id={0}") %>'
Runat="server" />
</li>
</ItemTemplate>
里面的navigateUrl='<%# Eval("Id","~/FileHandler.ashx?id={0}") %>'
这里的传参可能有问题,不知道对不对

还有
using (con)//用try catch也是可以的
{
con.Open();
byte[] file = System.Text.Encoding.Unicode.GetBytes(cmd.ExecuteScalar().ToString());
context.Response.BinaryWrite(file);
}
这里的编码是不是也有问题?
小_虎 2008-10-22
  • 打赏
  • 举报
回复
<a herf="abc.rar"> </a>
如果要其他什么技术可以参考下面:

关于c#直接下载图片或试听 protected void GetDownload(string xlfile)
{
string path = Server.MapPath(xlfile);
System.IO.FileInfo file = new System.IO.FileInfo(path);
Response.Clear();
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.UTF8;
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名
Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(file.Name));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
Response.AddHeader("Content-Length", file.Length.ToString());
// 指定返回的是一个不能被客户端读取的流,必须被下载
Response.ContentType = "application/ms-excel";
// 把文件流发送到客户端
Response.WriteFile(file.FullName);
// 停止页面的执行
Response.End();
}

参数为文件的url地址


62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧