【问题标题】:How to force a user to download a file i.e not allowing to save as in ASP.NET C#如何强制用户下载文件,即不允许另存为 ASP.NET C#
【发布时间】:2019-03-01 07:44:15
【问题描述】:

我想强制将我的流中的文件下载给用户。我想将文件保存在用户磁盘上,不允许另存为功能,因为我们不希望用户在下载时更改文件名。这是我的代码,在浏览器设置的基础上运行良好

        System.Web.HttpContext.Current.Response.Clear();
        System.Web.HttpContext.Current.Response.ClearContent();
        System.Web.HttpContext.Current.Response.ClearHeaders();
        System.Web.HttpContext.Current.Response.ContentType = "application/pdf;";
        System.Web.HttpContext.Current.Response.AddHeader("Content-Length", data.Length.ToString());
        System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=abc.pdf");
        //System.Web.HttpContext.Current.Response.OutputStream.Write(downloadData[0].data, 0, downloadData[0].data.Length);
        System.Web.HttpContext.Current.Response.BinaryWrite(data);
        System.Web.HttpContext.Current.Response.Flush();
        System.Web.HttpContext.Current.Response.End();

我知道

Ask where to save each file before downloading

是浏览器设置。是否有具体的解决方案可以禁用此功能并在每个浏览器中强制下载?

【问题讨论】:

  • 简单的答案是否定的。至少用户可以在文件保存后移动和/或重命名文件。它也是一项防止这种情况发生的安全功能。
  • 除非您愿意编写自己的浏览器,否则这是不可能的。当您返回 File(StreamResult) - 浏览器会完成其余的工作。就像@PeterSmith 所说,一旦完成下载,他们就可以更改名称。您将无法执行任何操作。
  • 暂时忽略这是不可能的,如果您的“神圣命名”文件名恰好与他们当前用来存储的文件相同,那么糟糕的用户体验会是什么样子他们的帐户在哪里?
  • 一个简单的问题:为什么???
  • 我知道这是不可能的。客户要求如此,所以我不得不考虑一下。

标签: c# asp.net asp.net-mvc file pdf


【解决方案1】:

正如上面的 cmets 所述,这是不可能的。一旦您的文件进入浏览器,它就在用户的控制之下。

一种可能的选择是使用 cookie 来存储一些您希望稍后用于用户信息/活动的特定数据。尽管这同样可以被用户阻止,但它是一种更稳定的方法。

【讨论】:

  • 能否详细说明。 cookie 如何帮助覆盖浏览器设置或强制下载?谢谢
  • 这取决于你为什么想要一个固定的文件名/位置。 ZorgoZ 也问过这个问题。一旦我们知道我可以更具体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-30
  • 2012-10-08
  • 2013-09-28
  • 2023-03-11
  • 1970-01-01
  • 2020-06-04
  • 2012-11-20
相关资源
最近更新 更多