【问题标题】:How to download file on client machine using C#如何使用 C# 在客户端机器上下载文件
【发布时间】:2016-02-02 11:05:02
【问题描述】:

我正在尝试在客户端计算机上下载文件。在客户不知情的情况下,我不会尝试这样做。该文件已存储在服务器上。我有文件路径,我尝试了下面的方法。但这似乎不起作用。我正在使用当前版本的 Google Chrome。而且一直失败。

try{
            string Filpath = ParseRequest.GetFileDetails(fileId);
            FileInfo file = new FileInfo(Filpath);
            string fileLength = file.Length.ToString();
            string fileName = file.Name;
            string fullName = file.FullName;                
            if (file.Exists)
            {
                Response.ClearContent();                    
                Response.ContentType = "application/pdf";                   
                Response.AddHeader("Content-Length", fileLength);
                Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);                  
                Response.Write(fullName);
                Response.Flush();
                Response.Close();
            }else{
                Response.Write("This file does not exist.");
            }
        }catch(Exception ex){
            XLog.Error(ex);
        }

以下是我收到的回复截图:

【问题讨论】:

  • “它似乎不起作用”不足以帮助我们帮助您诊断此问题。是否抛出异常?是否记录了错误?它在其他浏览器中是否有效?你有没有通过设置断点和观察代码在做什么来调试这个?
  • 你不能通过下载来驱动。那是令人难以置信的糟糕品味。
  • 对于 PDF,您需要 Response.BinaryWrite()Response.ContentType = "application/octet-stream";(或者只是 .WriteFile()
  • @Cᴏʀʏ 通过提到它“似乎不起作用”,我的意思是我得到了响应,但是当我在“开发人员工具”上检查响应时,它就像一个解析的 PDF 垃圾值字符串(按 F12)。
  • @DanielA.White 你能详细说明一下“下载驱动”吗?

标签: c# asp.net google-chrome


【解决方案1】:

您似乎正试图在 AJAX 请求后面调用文件下载(通过 content-dispostion: attachment 标头)。出于明显的安全原因,浏览器不允许这样做。因此,只需导航到在服务器上调用下载操作的 URL,而不是尝试获取 AJAX 请求的结果。

window.location = "path/to/downloadaction.aspx/GetFile/?fileId=xxx";

您指定的标头将指示浏览器发出请求,但浏览器不会执行重定向到页面的响应,而是显示文件下载对话框并将您留在单击按钮的页面上。

如果您需要 POST 数据以执行文件下载请求,您可以使用嵌入式 <iframe> -- 不幸的是,它们仍然可以解决 AJAX 文件限制。

编辑 Alex K. 也在 cmets 中,您需要通过 Response.BinaryWrite(pdfBytes) 将文件的字节添加到响应中,因此您需要在某处使用 File.ReadAllBytes() .

【讨论】:

  • 非常感谢!这确实有帮助!
猜你喜欢
  • 2018-04-03
  • 1970-01-01
  • 2018-09-13
  • 2011-04-30
  • 2020-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多