【问题标题】:Download PDF file from Web location and Prompt user SaveAs box on client in web-Application ASP C#从 Web 位置下载 PDF 文件并在 web-Application ASP C# 的客户端上提示用户 SaveAs 框
【发布时间】:2014-02-13 23:25:36
【问题描述】:

我有一个位于网站上的 PDF 文件的链接,例如(https://www.mysite.com/file.pdf)。 我需要的是提示用户(在客户端)SaveAs 框选择文件位置来保存文件。

我尝试了 SaveFileDialog ,但知道它仅适用于 Windows 窗体。我的应用程序是基于网络的。

C# 代码

var fileNumber = lblFileNumber.Text;
string fileDownloadLink = "http://www.mysite.com/" + fileNumber + ".pdf";
string fileName = fileNumber + ".pdf";
bool exist = false;
try
   {
      var request = (HttpWebRequest)System.Net.WebRequest.Create(fileDownloadLink);
      using (var response = (HttpWebResponse)request.GetResponse())
       {
          exist = response.StatusCode == HttpStatusCode.OK;
       }
   }
catch
   {
   }

if (exist)
   {
    var wClient = new WebClient();
    wClient.DownloadFile(fileDownloadLink, fileName);
   }

我写了上面的代码,它确实检查文件是否存在于文件位置,但是

如何提示用户选择要保存文件的位置并保存在本地硬盘上?

【问题讨论】:

    标签: c# asp.net client-side


    【解决方案1】:

    这是不可能的。当用户想要下载文件时,浏览器会决定如何向用户显示。

    直接从磁盘写入文件:

    HttpContext.Current.Response.TransmitFile(@"C:\yourfile.pdf");
    

    或者从另一个来源,作为字节数组加载:

    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.BinaryWrite(bytesOfYourFile);
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();
    

    【讨论】:

    • 你的意思是客户端不能直接从网站下载文件?
    • 您不能在客户端上显示 Windows 窗体(或任何其他)控件。而是通过以体面的方式将文件传递到浏览器来使用“网络工作方式”。
    • 那么如何执行这个任务呢?因为您在消息中提到的链接说“写一些适用于 ASP.NET 的东西”
    • 别人有一个解决方案,但我会把我的实现放在我的帖子里。
    猜你喜欢
    • 2020-04-16
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多