【问题标题】:Download file directly, not from window.open(url)直接下载文件,而不是从 window.open(url)
【发布时间】:2015-04-09 18:47:59
【问题描述】:

我目前在 ASP.NET 应用程序中遇到了一些会话问题。主应用程序打开一个 ASP.NET 对话框,其中包含一个 PDF 文件的链接。该文件是使用window.open('myurl/file.pdf');“下载”的

这会打开一个新窗口,但由于会话对象未传输而无法下载文件(请记住,解决方案有点复杂,因此尝试将会话保留在新窗口中将不起作用因为它嵌入在 C# WebBrowser 框架中)。

是否有可能直接从链接下载文件,而不是通过 window.open()?

【问题讨论】:

  • 为什么不在窗口中简单地链接到文件,而不是通过 javascript 调用文件?
  • 你可以试试:window.location.href = "myurl/file.pdf";
  • 我猜你可以在你的回复中设置一些适当的标题。看看这个线程(PHP)stackoverflow.com/questions/8485886/…,你应该使用 Content-Disposition: attachment
  • @mason,会话未传输,因为链接在新的 IE 窗口中打开(即不在 C# WebBrowser 框架内)。将查看上面的建议。
  • @mason,WinForm 应用程序。没有 WinForm 应用程序也能正常工作。

标签: javascript c# asp.net winforms


【解决方案1】:

如果文件系统上存在该文件,您可以链接到它。我知道这有时会根据用户的设置在浏览器中打开文件。

如果您不想通过打开窗口来执行此操作并且文件是动态生成的:

  1. 使用ButtonLinkButton
  2. 在您的 Button/LinkBut​​ton 的 Click 事件中使用 Response.AddHeader

        Response.AddHeader("content-disposition", "attachment;filename={filename.extension}")
    Response.ContentType = "application/{MIME type here}"
    
    1. 将结果流式传输到客户端(您需要查看此内容,我经常使用 Excel 通过流式传输 DataGrid 来执行此操作,但对于 PDF 则没有这么多)

这应该会提示用户做什么...

【讨论】:

【解决方案2】:

只需调用 window.dialogArguments.MyFunction(url) 即可解决此问题,它调用父窗口 MyFunction(url)。在那个窗口中,我使用了 window.external.MyFunctionToDotNet(url),它再次从 WebClient 中的 WebBrowser 获取 cookie 并下载了文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多