C# 通过asp.net将内存文件发送到客户端浏览器适用于Edge、IE和Firefox,但不适用于Chrome
我有一些通用代码,用于将文件从服务器发送到客户端。我正在发送一个pdf文件,无论我使用哪种浏览器,在我的本地机器上调试时一切都正常。但是,当我将文件部署到服务器上时,它只能通过Edge、IE或Firefox浏览器正常下载,而不能通过Chrome进行下载 使用Chrome,我会出现“网络错误”,如果我继续,它会下载网页的html而不是文件 代码如下:C# 通过asp.net将内存文件发送到客户端浏览器适用于Edge、IE和Firefox,但不适用于Chrome,c#,asp.net,C#,Asp.net,我有一些通用代码,用于将文件从服务器发送到客户端。我正在发送一个pdf文件,无论我使用哪种浏览器,在我的本地机器上调试时一切都正常。但是,当我将文件部署到服务器上时,它只能通过Edge、IE或Firefox浏览器正常下载,而不能通过Chrome进行下载 使用Chrome,我会出现“网络错误”,如果我继续,它会下载网页的html而不是文件 代码如下: public static void SendFile(HttpResponse response, string fileName, string
public static void SendFile(HttpResponse response, string fileName, string contentType, byte[] fileData)
{
BinaryWriter writer = new BinaryWriter(response.OutputStream);
response.Clear();
response.ContentType = contentType;
response.AddHeader("Content-Disposition", $"attachment; filename={fileName};");
writer.Write(fileData);
writer.Flush();
response.Flush();
response.Close();
response.End();
}
我在所有浏览器上使用此函数,其优点是从页面外的类开始工作:
public static void SendToBrowser(string virtualPath)
{
string FilePath = HttpContext.Current.Server.MapPath(virtualPath);
System.IO.FileInfo TargetFile = new System.IO.FileInfo(FilePath);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + TargetFile.Name);
HttpContext.Current.Response.AddHeader("Content-Length", TargetFile.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.WriteFile(TargetFile.FullName);
HttpContext.Current.Response.End();
}
问题在于
响应.Close()代码>,似乎Chrome不喜欢它
通过删除这一行代码,它不仅可以在Chrome中使用,而且可以在Firefox、IE和Edge中使用。如果您能提供一个包含函数调用方式和相关参数的示例,那将是非常棒的。我不确定我是否可以轻松给出一个完整的可验证示例,因为它涉及一个pdf文件。但是我对这个函数的调用如下所示:protectedvoidbtndownload_Click(objectsender,ImageClickEventArgs e){SaveFile.SendFile(Response,“FileName.pdf”,“application/pdf”,fileBytes);}您尝试过用双引号括起fielname吗。e、 g.。。。;文件名=\“{filename}\”;”;
只是用引号尝试了一下,没有区别。因此,您可以在尝试一个功能示例,只需单击按钮下载。您可以在下载实际文件,也可以在下载完整的项目。我在示例中添加了Button2,后面有您的代码,得到了相同的结果。我通常发现Chrome是最宽容的,但是在这种情况下,情况正好相反。我还想知道服务器上是否需要某种设置。我收回它。它确实有效,但只是因为文件确实存在于文件系统中。我的文件不存在。文件只存在于内存中,我不想将其写入服务器上的文件系统。