Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过asp.net将内存文件发送到客户端浏览器适用于Edge、IE和Firefox,但不适用于Chrome_C#_Asp.net - Fatal编程技术网

C# 通过asp.net将内存文件发送到客户端浏览器适用于Edge、IE和Firefox,但不适用于Chrome

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

我有一些通用代码,用于将文件从服务器发送到客户端。我正在发送一个pdf文件,无论我使用哪种浏览器,在我的本地机器上调试时一切都正常。但是,当我将文件部署到服务器上时,它只能通过Edge、IE或Firefox浏览器正常下载,而不能通过Chrome进行下载

使用Chrome,我会出现“网络错误”,如果我继续,它会下载网页的html而不是文件

代码如下:

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是最宽容的,但是在这种情况下,情况正好相反。我还想知道服务器上是否需要某种设置。我收回它。它确实有效,但只是因为文件确实存在于文件系统中。我的文件不存在。文件只存在于内存中,我不想将其写入服务器上的文件系统。