ASP.当表单提交返回要下载的文件时.NET: JS回调

ASP.NET: JS callback when form submit returns file to download

本文关键字:NET JS 回调 文件 表单提交 返回 下载 ASP      更新时间:2023-09-26

我有一个同步工作的ASPX表单页面(没有AJAX!)

此页上的一个按钮通过将文件直接写入响应流来返回要下载的文件:

Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=logfile.txt");
Response.TransmitFile(Server.MapPath("~/wmtest.docx"));
Response.End();

在浏览器显示"下载文件"对话框之前或之后,当响应返回时,我需要在页面上调用javascript回调。

有办法吗?

注意:它不是服务器上存在的可以通过URL访问或下载的真实物理文件,而是在请求中生成和返回的文件,因此返回文件的URL,然后在客户端使用JS下载它不是一个选项

提前感谢!——迈克尔。

由于您的响应返回流作为内容类型,因此您不能返回具有相同响应的html/javascript。我建议创建一个专门的下载。Aspx或类似的下载文件并使用javascript打开:

下载。Aspx(空-无html):

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="download.aspx.cs" Inherits="WebApplication2.download" %>

download.aspx.cs (employee):

public partial class download : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.ContentType = "application/octet-stream";
        Response.AppendHeader("Content-Disposition", "attachment; filename=logfile.txt");
        Response.TransmitFile(Server.MapPath("~/wmtest.docx"));
        Response.End();
    }
}

从你的页面下载文件:

 <input type="button" class="js-download" value="Download file"/>
  <script>
        var button = document.getElementsByClassName("js-download")[0];
        button.addEventListener("click", function () {
            window.open("download.aspx", "download");
            console.log("download starting....")
        });
  </script>