无法在响应中发送文件

时间:2016-11-17 21:18:37

标签: c# asp.net

我有一个在服务器上运行的代码集,它正确生成一个zip文件并将其存储在服务器上。我将该文件位置作为物理路径。

我没有尝试过让我使用客户端的响应来下载该文件。

尝试1:

System.IO.FileInfo fi = new System.IO.FileInfo(zipFilePath);

//setup HTML Download of provided Zip.
//application/zip
Response.ClearContent();
Response.Clear();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = "application / zip";
Response.AddHeader("Content-Disposition",
"attachment; filename=\"" + System.IO.Path.GetFileName(zipFilePath) + "\";");
Response.AddHeader("Content-Length", fi.Length.ToString());

Response.TransmitFile(zipFilePath);

Response.Flush();
Response.End();

没有结果。代码执行时没有错误,但没有下载到客户端。

尝试2:

//Almost the same as attempt 1, but with WriteFile instead
Response.WriteFile(zipFilePath);

无结果,与尝试1相同。

尝试3:

//Note: Same Header Section as Attempts 1 and 2
System.IO.BinaryReader reader = new System.IO.BinaryReader(new System.IO.FileStream(zipFilePath, System.IO.FileMode.Open));

int CHUNK = 1024;
List<byte> FileArray = new List<byte>();
while (reader.BaseStream.Position < reader.BaseStream.Length)
    FileArray.AddRange(reader.ReadBytes(CHUNK));

byte[] bArray = FileArray.ToArray();
reader.Close();

Response.OutputStream.Write(bArray, 0, bArray.Length);

Response.Flush();
Response.End();

无结果,与之前的尝试相同

尝试4:

//Identical to Attempt 3, but using BinaryWrite
Response.BinaryWrite(bArray);

无结果,与之前的尝试相同。

问题

这些代码块中的每一个都运行时没有错误,但“保存文件”对话框始终显示。我什么都没得到。我无法弄清楚我可能会失去的生活。

  • 文件路径已验证为正确
  • 代码在服务器上运行,而不是在客户端上运行,因此我无法使用'WebClient.Download'方法

如果有人有任何建议,我会全力以赴。我不知道如何将此文件下载到客户端。

2 个答案:

答案 0 :(得分:0)

我测试了您的代码(尝试1)并使其与测试文件一起正常工作。如果文件路径错误,您将获得System.IO.FileNotFoundException,这可能不是问题。

有两种方法可以解决这个问题:

  • 右键单击,尝试检查Chrome中的网页 并选择inspect。然后单击Network选项卡,然后刷新 页面(您应该获取文件的位置)。检查响应 该请求的标题 - 它是什么?
  • 尝试将内容类型设置为application/octet-stream
  • 在Visual Studio中使用调试器并逐步完成。

答案 1 :(得分:0)

原来这是一个与Ajax相关的错误,导致UpdatePanels和POST响应之间出现问题。

通过添加呼叫

修复了页面页面加载问题
ScriptManager.GetCurrent(Page).RegisterPostBackControl(btnGenerate);