首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >强制下载web服务器上的文件- ASP .NET C#

强制下载web服务器上的文件- ASP .NET C#
EN

Stack Overflow用户
提问于 2009-05-16 20:19:06
回答 5查看 32.1K关注 0票数 18

我需要强制开始下载一个.sql文件,当用户单击我的ASP .NET (C#)基于web应用程序中的一个按钮。

与在中一样,当单击按钮时,应在客户端打开一个另存为对话框...

我该怎么做呢?

编辑

这是我正在使用的代码

        string sql = "";
        using (System.IO.StreamReader rdr = System.IO.File.OpenText(fileName))
        {
            sql = rdr.ReadToEnd();
        }
        Response.ContentType = "text/plain";
        Response.AddHeader("Content-Disposition", "attachment; filename=Backup.sql");
        Response.Write(sql);
        Response.End();

这就是我得到的错误...

alt text http://img40.imageshack.us/img40/2103/erroro.gif

怎么了?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-16 20:29:08

创建单独的HTTP处理程序(DownloadSqlFile.ashx):

<%@ WebHandler Language="C#" Class="DownloadHandler" %>

using System;
using System.Web;

public class DownloadHandler : IHttpHandler {
    public void ProcessRequest(HttpContext context) {
        var fileName = "myfile.sql";
        var r = context.Response;
        r.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        r.ContentType = "text/plain";
        r.WriteFile(context.Server.MapPath(fileName));
    }
    public bool IsReusable { get { return false; } }
}

然后使ASP.NET页面中的按钮导航到DownloadSqlFile.ashx

票数 29
EN

Stack Overflow用户

发布于 2009-05-16 20:24:47

你需要告诉浏览器你发送的不是html,并且不应该在浏览器中显示出来。下面的代码可以用来返回服务器端代码中的一些文本,它将按照您的需要向用户显示保存对话框:

Response.Clear(); //eliminates issues where some response has already been sent
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.sql", filename));
Response.Write(yourSQL);
Response.End();

filename:您希望为其指定的名称

sql:yourSQL文件的内容

票数 18
EN

Stack Overflow用户

发布于 2009-05-16 21:23:38

问题是,您使用的代码与浏览器中当前加载的代码相同。您正在尝试修改当前加载的页面的响应流和部署。应按照Mehrdad的建议创建一个单独的HttpHandler。然后单击该按钮,您将调用指向处理程序的URL。该按钮甚至可以是一个简单的超链接,具有以下内容作为源URL:

<a href="DownloadSqlFile.ashx">Download SQL</a>

讲得通?关键是,您不能修改已经加载的页面的响应。使用处理程序启动一个新请求来完成此工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/873207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档