13

找出如何做到这一点应该不难。基本上我正在尝试获取一个字符串并让客户端在单击按钮时保存它。它应该弹出一个保存/打开对话框。没有额外的花里胡哨或任何东西。这不是火箭科学,(或者我会这么认为)。

似乎有很多不同的方式(StreamWriter、HttpResponse 等),但我找不到的示例都无法正常工作或解释发生了什么。提前致谢。

我发现的许多代码块中的一个示例......

(这只是一个例子,请随意不要以此为基础回答。)

String FileName = "FileName.txt";
String FilePath = "C:/...."; //Replace this
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath);
response.Flush();
response.End();

第 2 行表示替换该字符串。如何?这段代码被宣传为会弹出一个对话框。我不应该在代码中设置路径,对吧?

编辑:最终结果(再次编辑,删除必须在 End() 之前;)

        string FilePath = Server.MapPath("~/Temp/");
        string FileName = "test.txt";

        // Creates the file on server
        File.WriteAllText(FilePath + FileName, "hello");

        // Prompts user to save file
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "text/plain";
        response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
        response.TransmitFile(FilePath + FileName);
        response.Flush();

        // Deletes the file on server
        File.Delete(FilePath + FileName);

        response.End();
4

4 回答 4

5

第 2 行(FilePath)表示服务器上文件的路径

第 8 行:

response.TransmitFile(FilePath);

将该特定文件传输到客户端,这就是弹出保存对话框的内容。

如果您不传输文件,我不确定是否会弹出对话框(即使您设置了标题)

无论如何,我认为第 8 行应该是:

    response.TransmitFile(FilePath + FileName);
于 2012-05-30T14:18:20.707 回答
3

如果浏览器将响应作为某个文件找到,则会有一个默认对话框。如果您希望浏览器显示该默认对话框,您需要做的就是将响应作为文件发送到浏览器,您可以通过多种方式执行此操作:

  1. 如果是静态文件,

    • 最好的方法是在锚标签的 href 中提及文件路径。(显然,如果您没有安全问题)
    • 与您的回答一起出来,就像您的示例中所做的那样。
    • 您可以参考此处的其他方法4 从 asp.net 发送 pdf 的方法
  2. 如果它是您需要在运行时生成的动态文件,您可以做一个技巧,从文件流生成文件,将其放在服务器的某个临时文件夹中,如上所述将其作为静态文件读回。

于 2012-05-30T14:39:41.327 回答
1

FilePath应该指向您要发送给客户端的文件。这是服务器上的路径。

于 2012-05-30T14:14:06.843 回答
1

只需使用此代码,它应该可以提示用户打开一个对话框以在系统上打开或保存文件....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf");

        if (bytesPDF != null)
        {

            Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf");
            Response.ContentType = "application/octectstream";
            Response.BinaryWrite(bytesPDF);
            Response.End();
        }
于 2014-05-22T20:06:11.903 回答